diff --git a/.github/workflows/cli_test.yaml b/.github/workflows/cli_test.yaml index 9b24032..dde9ac4 100644 --- a/.github/workflows/cli_test.yaml +++ b/.github/workflows/cli_test.yaml @@ -1,42 +1,42 @@ -name: Test CLI Generated Project +# name: Test CLI Generated Project -on: [push] +# on: [push] -jobs: - test: - runs-on: ubuntu-latest - services: - postgres: - image: postgres:17.4-bookworm - env: - POSTGRES_PASSWORD: postgres - POSTGRES_USER: postgres - POSTGRES_DB: postgres - ports: - - 5432 - options: >- - --health-cmd "pg_isready" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - steps: - - uses: actions/checkout@v4 - - name: Install uv - uses: astral-sh/setup-uv@v5 - - name: "Set up Python" - uses: actions/setup-python@v5 - with: - python-version-file: "pyproject.toml" - - name: Install the project - run: uv sync --all-extras --dev - - name: Generate example project - run: uv run -m fastapi_forge start --use-example --no-ui --yes - - name: Run tests - working-directory: ./game_zone - env: - GAME_ZONE_PG_HOST: localhost - GAME_ZONE_PG_PORT: ${{ job.services.postgres.ports['5432'] }} - GAME_ZONE_PG_USER: postgres - GAME_ZONE_PG_PASSWORD: postgres - GAME_ZONE_PG_DATABASE: postgres - run: uv run pytest ./tests -v -s +# jobs: +# test: +# runs-on: ubuntu-latest +# services: +# postgres: +# image: postgres:17.4-bookworm +# env: +# POSTGRES_PASSWORD: postgres +# POSTGRES_USER: postgres +# POSTGRES_DB: postgres +# ports: +# - 5432 +# options: >- +# --health-cmd "pg_isready" +# --health-interval 10s +# --health-timeout 5s +# --health-retries 5 +# steps: +# - uses: actions/checkout@v4 +# - name: Install uv +# uses: astral-sh/setup-uv@v5 +# - name: "Set up Python" +# uses: actions/setup-python@v5 +# with: +# python-version-file: "pyproject.toml" +# - name: Install the project +# run: uv sync --all-extras --dev +# - name: Generate example project +# run: uv run -m fastapi_forge start --use-example --no-ui --yes +# - name: Run tests +# working-directory: ./game_zone +# env: +# GAME_ZONE_PG_HOST: localhost +# GAME_ZONE_PG_PORT: ${{ job.services.postgres.ports['5432'] }} +# GAME_ZONE_PG_USER: postgres +# GAME_ZONE_PG_PASSWORD: postgres +# GAME_ZONE_PG_DATABASE: postgres +# run: uv run pytest ./tests -v -s diff --git a/fastapi_forge/__main__.py b/fastapi_forge/__main__.py index a73b08a..adbb320 100644 --- a/fastapi_forge/__main__.py +++ b/fastapi_forge/__main__.py @@ -1,134 +1,4 @@ -import sys -from pathlib import Path - -import click - -from fastapi_forge.frontend.main import init -from fastapi_forge.project_io import ( - YamlProjectLoader, - create_postgres_project_loader, -) - - -def confirm_uv_installed() -> bool: - """Show UV requirement warning and get confirmation.""" - click.secho( - "\n⚠️ Important Requirement (use the '--yes' option to skip)", - fg="yellow", - bold=True, - ) - click.echo("Generated projects require UV to be installed.") - click.secho( - "GitHub: https://docs.astral.sh/uv/getting-started/installation", - fg="blue", - underline=True, - ) - - if not click.confirm( - "\nDo you have UV installed and ready to use?", - default=True, - ): - click.secho( - "\n❌ Please install UV first and restart this command.", - fg="red", - ) - click.echo("Verify with: uv --version") - return False - return True - - -@click.group( - help="FastAPI Forge CLI - A tool for generating FastAPI projects.", - context_settings={"help_option_names": ["-h", "--help"]}, -) -@click.version_option(package_name="fastapi-forge") -@click.option("-v", "--verbose", count=True, help="Increase verbosity level.") -@click.pass_context -def main(ctx: click.Context, verbose: int) -> None: - """FastAPI Forge CLI entry point.""" - ctx.ensure_object(dict) - ctx.obj["verbose"] = verbose - - -@main.command( - help="Start FastAPI Forge - Generate a new FastAPI project.", -) -@click.option( - "--use-example", - is_flag=True, - help="Generate a new project using a prebuilt example provided by FastAPI Forge.", -) -@click.option( - "--no-ui", - is_flag=True, - help="Generate the project directly in the terminal without launching the UI (default: False).", -) -@click.option( - "--dry-run", - is_flag=True, - help="Perform a dry run without generating any files (requires --no-ui).", -) -@click.option( - "--from-yaml", - type=click.Path( - exists=True, - dir_okay=False, - readable=True, - path_type=Path, - ), - help="Generate a project using a custom configuration from a YAML file.", -) -@click.option( - "--yes", - is_flag=True, - help="Automatically confirm all prompts (use with caution).", -) -@click.option( - "--conn-string", - help="Generate a project from a PostgreSQL connection string " - "(e.g., postgresql://user:password@host:port/dbname)", -) -@click.pass_context -def start( - _: click.Context, - use_example: bool = False, - no_ui: bool = False, - dry_run: bool = False, - yes: bool = False, - from_yaml: Path | None = None, - conn_string: str | None = None, -) -> None: - """Start FastAPI Forge.""" - if not yes and not confirm_uv_installed(): - sys.exit(1) - - option_count = sum([use_example, bool(from_yaml), bool(conn_string)]) - if option_count > 1: - raise click.UsageError( - "Only one of '--use-example', '--from-yaml', or '--conn-string' can be used." - ) - - if no_ui and option_count < 1: - raise click.UsageError( - "Option '--no-ui' requires one of '--use-example', '--from-yaml', or '--conn-string'." - ) - - if dry_run and not no_ui: - raise click.UsageError("Option '--dry-run' requires '--no-ui' to be set.") - - project_spec = None - - if from_yaml: - project_spec = YamlProjectLoader(project_path=from_yaml).load() - elif conn_string: - project_spec = create_postgres_project_loader(conn_string).load() - elif use_example: - base_path = Path(__file__).parent / "example-projects" - path = base_path / "game_zone.yaml" - project_spec = YamlProjectLoader(project_path=path).load() - - init(project_spec=project_spec, no_ui=no_ui, dry_run=dry_run) - +from fastapi_forge.cli import main if __name__ in {"__main__", "__mp_main__"}: main() diff --git a/fastapi_forge/api/__init__.py b/fastapi_forge/api/__init__.py new file mode 100644 index 0000000..bee7379 --- /dev/null +++ b/fastapi_forge/api/__init__.py @@ -0,0 +1,3 @@ +__all__ = ["start_forge_api"] + +from .main import start_forge_api diff --git a/fastapi_forge/api/main.py b/fastapi_forge/api/main.py new file mode 100644 index 0000000..dfa5d8c --- /dev/null +++ b/fastapi_forge/api/main.py @@ -0,0 +1,37 @@ +import webbrowser +from pathlib import Path + +import uvicorn +from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles + +from fastapi_forge.core.build import build_fastapi_project +from fastapi_forge.schemas import ProjectSpec + +app = FastAPI() + + +def start_forge_api() -> None: + app.mount( + "/", + StaticFiles( + directory=Path(__file__).parent.parent / "static", + html=True, + ), + name="frontend", + ) + + webbrowser.open("http://localhost:8000") + uvicorn.run(app, host="localhost", port=8000) + + +@app.post("/generate") +async def generate_project(project_spec: ProjectSpec) -> None: + try: + await build_fastapi_project(project_spec, dry_run=False) + except Exception as e: + print(e) + + +if __name__ == "__main__": + start_forge_api() diff --git a/fastapi_forge/cli/__init__.py b/fastapi_forge/cli/__init__.py new file mode 100644 index 0000000..8c86109 --- /dev/null +++ b/fastapi_forge/cli/__init__.py @@ -0,0 +1,3 @@ +__all__ = ["main"] + +from .main import main diff --git a/fastapi_forge/cli/main.py b/fastapi_forge/cli/main.py new file mode 100644 index 0000000..9576a98 --- /dev/null +++ b/fastapi_forge/cli/main.py @@ -0,0 +1,130 @@ +import click + +from fastapi_forge.api import start_forge_api + + +def confirm_uv_installed() -> bool: + """Show UV requirement warning and get confirmation.""" + click.secho( + "\n⚠️ Important Requirement (use the '--yes' option to skip)", + fg="yellow", + bold=True, + ) + click.echo("Generated projects require UV to be installed.") + click.secho( + "GitHub: https://docs.astral.sh/uv/getting-started/installation", + fg="blue", + underline=True, + ) + + if not click.confirm( + "\nDo you have UV installed and ready to use?", + default=True, + ): + click.secho( + "\n❌ Please install UV first and restart this command.", + fg="red", + ) + click.echo("Verify with: uv --version") + return False + return True + + +@click.group( + help="FastAPI Forge CLI - A tool for generating FastAPI projects.", + context_settings={"help_option_names": ["-h", "--help"]}, +) +@click.version_option(package_name="fastapi-forge") +@click.option("-v", "--verbose", count=True, help="Increase verbosity level.") +@click.pass_context +def main(ctx: click.Context, verbose: int) -> None: + """FastAPI Forge CLI entry point.""" + ctx.ensure_object(dict) + ctx.obj["verbose"] = verbose + + +@main.command() +def start() -> None: + start_forge_api() + + +# @main.command( +# help="Start FastAPI Forge - Generate a new FastAPI project.", +# ) +# @click.option( +# "--use-example", +# is_flag=True, +# help="Generate a new project using a prebuilt example provided by FastAPI Forge.", +# ) +# @click.option( +# "--no-ui", +# is_flag=True, +# help="Generate the project directly in the terminal without launching the UI (default: False).", +# ) +# @click.option( +# "--dry-run", +# is_flag=True, +# help="Perform a dry run without generating any files (requires --no-ui).", +# ) +# @click.option( +# "--from-yaml", +# type=click.Path( +# exists=True, +# dir_okay=False, +# readable=True, +# path_type=Path, +# ), +# help="Generate a project using a custom configuration from a YAML file.", +# ) +# @click.option( +# "--yes", +# is_flag=True, +# help="Automatically confirm all prompts (use with caution).", +# ) +# @click.option( +# "--conn-string", +# help="Generate a project from a PostgreSQL connection string " +# "(e.g., postgresql://user:password@host:port/dbname)", +# ) +# @click.pass_context +# def start_v1( +# _: click.Context, +# use_example: bool = False, +# no_ui: bool = False, +# dry_run: bool = False, +# yes: bool = False, +# from_yaml: Path | None = None, +# conn_string: str | None = None, +# ) -> None: +# """Start FastAPI Forge.""" +# if not yes and not confirm_uv_installed(): +# sys.exit(1) + +# option_count = sum([use_example, bool(from_yaml), bool(conn_string)]) +# if option_count > 1: +# raise click.UsageError( +# "Only one of '--use-example', '--from-yaml', or '--conn-string' can be used." +# ) + +# if no_ui and option_count < 1: +# raise click.UsageError( +# "Option '--no-ui' requires one of '--use-example', '--from-yaml', or '--conn-string'." +# ) + +# if dry_run and not no_ui: +# raise click.UsageError("Option '--dry-run' requires '--no-ui' to be set.") + +# project_spec = None + +# if from_yaml: +# project_spec = YamlProjectLoader(project_path=from_yaml).load() +# elif conn_string: +# project_spec = create_postgres_project_loader(conn_string).load() +# elif use_example: +# base_path = Path(__file__).parent / "example-projects" +# path = base_path / "game_zone.yaml" +# project_spec = YamlProjectLoader(project_path=path).load() + + +if __name__ in {"__main__", "__mp_main__"}: + main() diff --git a/fastapi_forge/frontend/components/__init__.py b/fastapi_forge/frontend/components/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/fastapi_forge/frontend/components/header.py b/fastapi_forge/frontend/components/header.py deleted file mode 100644 index e507c46..0000000 --- a/fastapi_forge/frontend/components/header.py +++ /dev/null @@ -1,30 +0,0 @@ -from nicegui import ui - - -class Header(ui.header): - def __init__(self): - super().__init__() - self.dark_mode = ui.dark_mode(value=True) - self._build() - - def _build(self) -> None: - with self: - ui.button( - icon="eva-github", - color="white", - on_click=lambda: ui.navigate.to( - "https://github.com/mslaursen/fastapi-forge", - ), - ).classes("self-center", remove="bg-white").tooltip( - "Drop a ⭐️ if you like FastAPI Forge!", - ) - - ui.label(text="FastAPI Forge").classes( - "font-bold ml-auto self-center text-2xl", - ) - - ui.button( - icon="dark_mode", - color="white", - on_click=lambda: self.dark_mode.toggle(), - ).classes("ml-auto", remove="bg-white") diff --git a/fastapi_forge/frontend/components/item_create.py b/fastapi_forge/frontend/components/item_create.py deleted file mode 100644 index 68dc690..0000000 --- a/fastapi_forge/frontend/components/item_create.py +++ /dev/null @@ -1,67 +0,0 @@ -from collections.abc import Callable - -from nicegui import ui - -from fastapi_forge.frontend.state import state - - -class _RowCreate(ui.row): - def __init__( - self, - *, - input_placeholder: str, - input_tooltip: str, - button_tooltip: str, - on_add_item: Callable[[str], None], - ): - super().__init__(wrap=False) - self.input_placeholder = input_placeholder - self.input_tooltip = input_tooltip - self.button_tooltip = button_tooltip - self.on_add_item = on_add_item - - self._build() - - def _build(self) -> None: - with self.classes("w-full flex items-center justify-between"): - self.item_input = ( - ui.input(placeholder=self.input_placeholder) - .classes("self-center") - .tooltip( - self.input_tooltip, - ) - ) - self.add_button = ( - ui.button(icon="add", on_click=self._add_item) - .classes("self-center") - .tooltip(self.button_tooltip) - ) - - def _add_item(self) -> None: - if not self.item_input.value: - return - value: str = self.item_input.value - item_name = value.strip() - if item_name: - self.on_add_item(item_name) - self.item_input.value = "" - - -class ModelCreate(_RowCreate): - def __init__(self): - super().__init__( - input_placeholder="Model name", - input_tooltip="Model names should be singular and snake_case (e.g. 'auth_user').", - button_tooltip="Add Model", - on_add_item=state.add_model, - ) - - -class EnumCreate(_RowCreate): - def __init__(self): - super().__init__( - input_placeholder="Enum name", - input_tooltip="Enums can be used as data types for model fields.", - button_tooltip="Add Enum", - on_add_item=state.add_enum, - ) diff --git a/fastapi_forge/frontend/components/item_row.py b/fastapi_forge/frontend/components/item_row.py deleted file mode 100644 index 67c6ab6..0000000 --- a/fastapi_forge/frontend/components/item_row.py +++ /dev/null @@ -1,142 +0,0 @@ -from collections.abc import Callable - -from nicegui import ui -from pydantic import BaseModel - -from fastapi_forge.frontend.constants import ITEM_ROW_TRUNCATE_LEN -from fastapi_forge.frontend.state import state -from fastapi_forge.schemas import CustomEnum, Model - - -class _ItemRow[T: BaseModel](ui.row): - def __init__( - self, - item: T, - color: str | None = None, - icon: str | None = None, - *, - is_selected: bool, - on_select: Callable[[T], None], - on_delete: Callable[[T], None], - on_update_name: Callable[[T, str], None], - get_name: Callable[[T], str] = lambda x: x.name, # type: ignore - ): - super().__init__(wrap=False) - self.item = item - self.is_selected_row = is_selected - self.color = color - self.icon = icon - self.is_editing = False - - self.on_select = on_select - self.on_delete = on_delete - self.on_update_name = on_update_name - self.get_name = get_name - - self._build() - - def _build(self) -> None: - self.on("click", lambda: self.on_select(self.item)) - base_classes = "w-full flex items-center justify-between cursor-pointer p-2 rounded transition-all" - if self.is_selected_row: - base_classes += " bg-blue-100 dark:bg-blue-900 border-l-4 border-blue-500" - else: - base_classes += " hover:bg-gray-100 dark:hover:bg-gray-800" - - with self.classes(base_classes): - with ui.row().classes("flex-nowrap gap-2 min-w-fit"): - if self.icon: - ui.icon(self.icon, color="green", size="20px").classes( - "self-center" - ) - full_name = self.get_name(self.item) - - if len(full_name) > ITEM_ROW_TRUNCATE_LEN: - truncated_name = ( - (full_name[:ITEM_ROW_TRUNCATE_LEN] + "...") - if len(full_name) > ITEM_ROW_TRUNCATE_LEN - else full_name - ) - self.name_label = ( - ui.label(text=truncated_name) - .classes("self-center truncate") - .tooltip(full_name) - ) - else: - self.name_label = ui.label(text=full_name).classes( - "self-center truncate" - ) - - if self.color: - self.name_label.classes(add=self.color) - - self.name_input = ( - ui.input(value=self.get_name(self.item)) - .classes("self-center") - .bind_visibility_from(self, "is_editing") - ) - self.name_label.bind_visibility_from(self, "is_editing", lambda x: not x) - - with ui.row().classes("flex-nowrap gap-2 min-w-fit"): - self.edit_button = ( - ui.button(icon="edit") - .on("click.stop", self._toggle_edit) - .bind_visibility_from(self, "is_editing", lambda x: not x) - .classes("min-w-fit") - ) - - self.save_button = ( - ui.button(icon="save") - .on("click.stop", self._save_item) - .bind_visibility_from(self, "is_editing") - .classes("min-w-fit") - ) - - ui.button(icon="delete").on( - "click.stop", lambda: self.on_delete(self.item) - ).classes("min-w-fit") - - def _toggle_edit(self) -> None: - self.is_editing = not self.is_editing - - def _save_item(self) -> None: - new_name = self.name_input.value.strip() - if new_name: - self.on_update_name(self.item, new_name) - self.is_editing = False - - -class ModelRow(_ItemRow): - def __init__( - self, - model: Model, - color: str | None = None, - icon: str | None = None, - ): - super().__init__( - item=model, - color=color, - icon=icon, - is_selected=model == state.selected_model, - on_select=state.select_model, - on_delete=state.delete_model, - on_update_name=state.update_model_name, - ) - - -class EnumRow(_ItemRow): - def __init__( - self, - custom_enum: CustomEnum, - color: str | None = None, - icon: str | None = None, - ): - super().__init__( - item=custom_enum, - color=color, - icon=icon, - is_selected=custom_enum == state.selected_enum, - on_select=state.select_enum, - on_delete=state.delete_enum, - on_update_name=state.update_enum_name, - ) diff --git a/fastapi_forge/frontend/constants.py b/fastapi_forge/frontend/constants.py deleted file mode 100644 index bede858..0000000 --- a/fastapi_forge/frontend/constants.py +++ /dev/null @@ -1,85 +0,0 @@ -from typing import Any - -from fastapi_forge.enums import FieldDataTypeEnum -from fastapi_forge.schemas import ModelField - -SELECTED_MODEL_TEXT_COLOR = "text-black-500 dark:text-amber-300" -SELECTED_ENUM_TEXT_COLOR = "text-black-500 dark:text-amber-300" -ITEM_ROW_TRUNCATE_LEN = 17 - -FIELD_COLUMNS: list[dict[str, Any]] = [ - { - "name": "name", - "label": "Name", - "field": "name", - "required": True, - "align": "left", - }, - {"name": "type", "label": "Type", "field": "type", "align": "left"}, - { - "name": "primary_key", - "label": "Primary Key", - "field": "primary_key", - "align": "center", - }, - {"name": "nullable", "label": "Nullable", "field": "nullable", "align": "center"}, - {"name": "unique", "label": "Unique", "field": "unique", "align": "center"}, - {"name": "index", "label": "Index", "field": "index", "align": "center"}, -] - -ENUM_COLUMNS: list[dict[str, Any]] = [ - { - "name": "name", - "label": "Name", - "field": "name", - "required": True, - "align": "left", - }, - { - "name": "value", - "label": "Value", - "field": "value", - "required": True, - "align": "left", - }, -] - -RELATIONSHIP_COLUMNS: list[dict[str, Any]] = [ - { - "name": "field_name", - "label": "Field Name", - "field": "field_name", - "required": True, - "align": "left", - }, - { - "name": "target_model", - "label": "Target Model", - "field": "target_model", - "align": "left", - }, - { - "name": "on_delete", - "label": "On Delete", - "field": "on_delete", - "align": "left", - }, - {"name": "nullable", "label": "Nullable", "field": "nullable", "align": "center"}, - {"name": "index", "label": "Index", "field": "index", "align": "center"}, - {"name": "unique", "label": "Unique", "field": "unique", "align": "center"}, -] - - -DEFAULT_AUTH_USER_FIELDS: list[ModelField] = [ - ModelField( - name="email", - type=FieldDataTypeEnum.STRING, - unique=True, - index=True, - ), - ModelField( - name="password", - type=FieldDataTypeEnum.STRING, - ), -] -DEFAULT_AUTH_USER_ROLE_ENUM_NAME = "UserRole" diff --git a/fastapi_forge/frontend/main.py b/fastapi_forge/frontend/main.py deleted file mode 100644 index 1345c0f..0000000 --- a/fastapi_forge/frontend/main.py +++ /dev/null @@ -1,94 +0,0 @@ -import asyncio - -from nicegui import native, ui - -from fastapi_forge.core import build_fastapi_project -from fastapi_forge.enums import FieldDataTypeEnum -from fastapi_forge.frontend.components.header import Header -from fastapi_forge.frontend.panels.item_editor_panel import ItemEditorPanel -from fastapi_forge.frontend.panels.left_panel import LeftPanel -from fastapi_forge.frontend.panels.project_config_panel import ProjectConfigPanel -from fastapi_forge.frontend.state import state -from fastapi_forge.schemas import ( - CustomEnum, - CustomEnumValue, - Model, - ModelField, - ProjectSpec, -) - - -def setup_ui() -> None: - """Setup basic UI configuration""" - ui.add_head_html( - '', - ) - ui.button.default_props("round flat dense") - ui.input.default_props("dense") - Header() - - -def create_ui_components() -> None: - """Create all UI components""" - ItemEditorPanel() - - LeftPanel().classes("shadow-xl dark:shadow-none") - ProjectConfigPanel().classes("shadow-xl dark:shadow-none") - - -def run_ui(reload: bool) -> None: - """Run the NiceGUI application""" - ui.run( - reload=reload, - title="FastAPI Forge", - port=native.find_open_port(8777, 8999), - ) - - -def init( - *, - reload: bool = False, - no_ui: bool = False, - dry_run: bool = False, - project_spec: ProjectSpec | None = None, -) -> None: - if project_spec: - if no_ui: - asyncio.run(build_fastapi_project(project_spec, dry_run=dry_run)) - return - - state.initialize_from_project(project_spec) - - setup_ui() - create_ui_components() - run_ui(reload) - - -if __name__ in {"__main__", "__mp_main__"}: - project_spec = ProjectSpec( - project_name="reload", - models=[ - Model( - name="test_model", - fields=[ - ModelField( - name="id", - primary_key=True, - type=FieldDataTypeEnum.UUID, - ), - ], - ), - ], - custom_enums=[ - CustomEnum( - name="MyEnum", - values=[ - CustomEnumValue( - name="FOO", - value="auto()", - ), - ], - ) - ], - ) - init(reload=True, project_spec=project_spec) diff --git a/fastapi_forge/frontend/modals/__init__.py b/fastapi_forge/frontend/modals/__init__.py deleted file mode 100644 index aa94ba1..0000000 --- a/fastapi_forge/frontend/modals/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from fastapi_forge.frontend.modals.enum_modal import ( - AddEnumValueModal, - UpdateEnumValueModal, -) -from fastapi_forge.frontend.modals.field_modal import AddFieldModal, UpdateFieldModal -from fastapi_forge.frontend.modals.relation_modal import ( - AddRelationModal, - UpdateRelationModal, -) diff --git a/fastapi_forge/frontend/modals/enum_modal.py b/fastapi_forge/frontend/modals/enum_modal.py deleted file mode 100644 index 71b4fda..0000000 --- a/fastapi_forge/frontend/modals/enum_modal.py +++ /dev/null @@ -1,110 +0,0 @@ -from abc import ABC, abstractmethod -from collections.abc import Callable - -from nicegui import ui - -from fastapi_forge.frontend.notifications import notify_value_error -from fastapi_forge.frontend.state import state -from fastapi_forge.schemas import CustomEnumValue - - -class BaseEnumValueModal(ui.dialog, ABC): - title: str - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._build() - - @abstractmethod - def _build_action_buttons(self) -> None: - pass - - def _build(self) -> None: - with self, ui.card().classes("w-full max-w-md no-shadow rounded-lg"): - with ui.row().classes("w-full justify-between items-center p-4 border-b"): - ui.label(self.title).classes("text-xl font-semibold") - - with ( - ui.column().classes("w-full p-6 space-y-4"), - ui.grid(columns=2).classes("w-full gap-4"), - ): - self.value_name = ( - ui.input(label="Name").props("outlined dense").classes("w-full") - ) - self.value_value = ( - ui.input(label="Value").props("outlined dense").classes("w-full") - ).tooltip( - "Set to auto(), or any string value without including quotes." - ) - - with ui.row().classes("w-full justify-end p-4 border-t gap-2"): - self._build_action_buttons() - - def reset(self) -> None: - self.value_name.value = "" - self.value_value.value = "" - - -class AddEnumValueModal(BaseEnumValueModal): - title = "Add Enum Value" - - def __init__(self, on_add_value: Callable): - super().__init__() - self.on_add_value = on_add_value - - def _build_action_buttons(self) -> None: - ui.button("Cancel", on_click=self.close) - ui.button( - self.title, - on_click=self._handle_add, - ) - - def _handle_add(self) -> None: - try: - self.on_add_value( - name=self.value_name.value, - value=self.value_value.value, - ) - self.close() - except ValueError as exc: - notify_value_error(exc) - return - - -class UpdateEnumValueModal(BaseEnumValueModal): - title = "Update Enum Value" - - def __init__(self, on_update_value: Callable): - super().__init__() - self.on_update_value = on_update_value - - def _build_action_buttons(self) -> None: - ui.button("Cancel", on_click=self.close) - ui.button( - self.title, - on_click=self._handle_update, - ) - - def _handle_update(self) -> None: - if not state.selected_enum_value: - return - try: - self.on_update_value( - name=self.value_name.value, - value=self.value_value.value, - ) - self.close() - except ValueError as exc: - notify_value_error(exc) - return - - def _set_value(self, enum_value: CustomEnumValue) -> None: - state.selected_enum_value = enum_value - if enum_value: - self.value_name.value = enum_value.name - self.value_value.value = enum_value.value - - def open(self, enum_value: CustomEnumValue | None = None) -> None: - if enum_value: - self._set_value(enum_value) - super().open() diff --git a/fastapi_forge/frontend/modals/field_modal.py b/fastapi_forge/frontend/modals/field_modal.py deleted file mode 100644 index d9f67b5..0000000 --- a/fastapi_forge/frontend/modals/field_modal.py +++ /dev/null @@ -1,384 +0,0 @@ -from abc import ABC, abstractmethod -from collections.abc import Callable - -from nicegui import ui -from pydantic import ValidationError - -from fastapi_forge.enums import FieldDataTypeEnum -from fastapi_forge.frontend.notifications import ( - notify_validation_error, - notify_value_error, -) -from fastapi_forge.frontend.state import state -from fastapi_forge.render.filters import JinjaFilters -from fastapi_forge.schemas import ModelField, ModelFieldMetadata - - -class BaseFieldModal(ui.dialog, ABC): - title: str - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.extra_kwargs = {} - self.show_enum_selector: bool = False - self.show_metadata: bool = False - self.show_enum_defaults: bool = False - self.on("hide", lambda: self.reset()) - self._build() - - @abstractmethod - def _build_action_buttons(self) -> None: - pass - - def _build(self) -> None: - with self, ui.card().classes("w-full max-w-2xl no-shadow rounded-lg"): - with ui.row().classes("w-full justify-between items-center p-4 border-b"): - ui.label(self.title).classes("text-xl font-semibold") - ui.button( - icon="visibility", - on_click=self._show_field_preview, - ).props("flat dense").tooltip("Preview SQLAlchemy field code") - - with ui.column().classes("w-full p-6 space-y-4"): - with ui.grid(columns=2).classes("w-full gap-4"): - self.field_name = ui.input(label="Field Name").props( - "outlined dense" - ) - self.field_type = ui.select( - list(FieldDataTypeEnum), - label="Field Type", - on_change=self._handle_type_change, - ).props("outlined dense") - self.default_value_container = ui.column().classes("w-full") - with self.default_value_container: - self.default_value_input = ( - ui.input(label="Default Value") - .props("outlined dense") - .classes("w-full") - ) - - self.enum_selector = ( - ui.select( - [e.name for e in state.custom_enums], - label="Select Enum", - on_change=lambda: self._handle_type_change(), - ) - .props("outlined dense") - .classes("w-full") - .bind_visibility_from(self, "show_enum_selector") - ) - - with ui.row().classes("w-full justify-between gap-4"): - self.primary_key = ui.checkbox("Primary Key").props("dense") - self.nullable = ui.checkbox("Nullable").props("dense") - self.unique = ui.checkbox("Unique").props("dense") - self.index = ui.checkbox("Index").props("dense") - - self.metadata_card = ( - ui.card() - .classes("w-full p-4 border rounded-lg") - .bind_visibility_from(self, "show_metadata") - ) - with self.metadata_card: - with ui.row().classes("w-full justify-between items-center mb-2"): - ui.label("Field Metadata").classes("text-md font-medium") - - with ui.row().classes("w-full gap-4"): - self.created_at = ui.checkbox("Created At Timestamp").props( - "dense" - ) - self.updated_at = ui.checkbox("Updated At Timestamp").props( - "dense" - ) - - with ui.card().classes("w-full p-4 border rounded-lg"): - with ui.row().classes("w-full justify-between items-center"): - ui.label("Extra Column Arguments").classes( - "text-md font-medium" - ) - ui.button( - "Add Argument", icon="add", on_click=self._add_kwarg_row - ) - - self.kwargs_container = ui.column().classes("w-full gap-2 mt-2") - - with ui.row().classes("w-full justify-end p-4 border-t gap-2"): - self._build_action_buttons() - - def _get_current_enum_values(self) -> list[str]: - if not self.enum_selector.value: - return [] - selected_enum = next( - (e for e in state.custom_enums if e.name == self.enum_selector.value), None - ) - return [v.name for v in selected_enum.values] if selected_enum else [] - - def _handle_type_change(self) -> None: - self.show_metadata = self.field_type.value == FieldDataTypeEnum.DATETIME - self.show_enum_selector = self.field_type.value == FieldDataTypeEnum.ENUM - self.show_enum_defaults = self.field_type.value == FieldDataTypeEnum.ENUM - - if self.show_enum_selector: - self.enum_selector.options = [e.name for e in state.custom_enums] - self.enum_selector.update() - - if self.show_enum_defaults: - self.default_value_container.clear() - with self.default_value_container: - self.default_value_select = ( - ui.select( - self._get_current_enum_values(), - label="Default Value", - ) - .props("outlined dense") - .classes("w-full") - ) - else: - self.default_value_container.clear() - with self.default_value_container: - self.default_value_input = ( - ui.input(label="Default Value") - .props("outlined dense") - .classes("w-full") - ) - - def _add_kwarg_row(self, key: str = "", value: str = "") -> None: - with ( - self.kwargs_container, - ui.row().classes("w-full items-center gap-2") as row, - ): - key_input = ( - ui.input(label="Key", value=key) - .props("outlined dense") - .classes("flex-1") - ) - value_input = ( - ui.input(label="Value", value=value) - .props("outlined dense") - .classes("flex-1") - ) - - def update_kwargs(): - if key_input.value and value_input.value: - self.extra_kwargs[key_input.value] = value_input.value - elif key_input.value in self.extra_kwargs: - del self.extra_kwargs[key_input.value] - - def remove_row(): - if key_input.value in self.extra_kwargs: - del self.extra_kwargs[key_input.value] - row.delete() - - ui.button(icon="delete", on_click=remove_row) - - key_input.on("blur", update_kwargs) - value_input.on("blur", update_kwargs) - key_input.on("keydown.enter", update_kwargs) - value_input.on("keydown.enter", update_kwargs) - - def _show_field_preview(self) -> None: - if not self.field_name.value: - ui.notify("Set a field name first", type="warning") - return - if not self.field_type.value: - ui.notify("Select a field type first", type="warning") - return - try: - default_value = ( - self.default_value_select.value - if self.show_enum_defaults - else self.default_value_input.value - ) or None - - with ui.dialog() as modal, ui.card().classes("no-shadow border-[1px]"): - preview_field = ModelField( - name=self.field_name.value, - type=self.field_type.value, - type_enum=self.enum_selector.value, - primary_key=self.primary_key.value, - nullable=self.nullable.value, - unique=self.unique.value, - index=self.index.value, - default_value=default_value, - extra_kwargs=self.extra_kwargs or None, - metadata=ModelFieldMetadata( - is_created_at_timestamp=( - self.created_at.value if self.show_metadata else False - ), - is_updated_at_timestamp=( - self.updated_at.value if self.show_metadata else False - ), - is_foreign_key=False, - ), - ) - ui.code(JinjaFilters.generate_field(preview_field)).classes("w-full") - modal.open() - except ValidationError as exc: - notify_validation_error(exc) - - def reset(self) -> None: - self.field_name.value = "" - self.field_type.value = None - self.enum_selector.value = None - self.primary_key.value = False - self.nullable.value = False - self.unique.value = False - self.index.value = False - if hasattr(self, "default_value_input"): - self.default_value_input.value = "" - if hasattr(self, "default_value_select"): - self.default_value_select.value = None - self.created_at.value = False - self.updated_at.value = False - self.show_metadata = False - self.show_enum_selector = False - self.show_enum_defaults = False - self.extra_kwargs = {} - self.kwargs_container.clear() - - -class AddFieldModal(BaseFieldModal): - title = "Add Field" - - def __init__(self, on_add_field: Callable): - super().__init__() - self.on_add_field = on_add_field - - def _build_action_buttons(self) -> None: - ui.button("Cancel", on_click=self.close) - ui.button( - self.title, - on_click=lambda: self.on_add_field( - name=self.field_name.value, - type=self.field_type.value, - type_enum=next( - ( - e.name - for e in state.custom_enums - if e.name == self.enum_selector.value - ), - None, - ), - primary_key=self.primary_key.value, - nullable=self.nullable.value, - unique=self.unique.value, - index=self.index.value, - default_value=( - self.default_value_select.value - if self.show_enum_defaults - else self.default_value_input.value - ) - or None, - extra_kwargs=self.extra_kwargs or None, - metadata=ModelFieldMetadata( - is_created_at_timestamp=( - self.created_at.value if self.show_metadata else False - ), - is_updated_at_timestamp=( - self.updated_at.value if self.show_metadata else False - ), - is_foreign_key=False, - ), - ), - ) - - -class UpdateFieldModal(BaseFieldModal): - title = "Update Field" - - def __init__(self, on_update_field: Callable): - super().__init__() - self.on_update_field = on_update_field - - def _build_action_buttons(self) -> None: - ui.button("Cancel", on_click=self.close) - ui.button( - self.title, - on_click=self._handle_update, - ) - - def _handle_update(self) -> None: - if not state.selected_field: - return - - try: - self.on_update_field( - name=self.field_name.value, - type=self.field_type.value, - type_enum=( - next( - ( - e.name - for e in state.custom_enums - if e.name == self.enum_selector.value - ), - None, - ) - if self.show_enum_selector - else None - ), - primary_key=self.primary_key.value, - nullable=self.nullable.value, - unique=self.unique.value, - index=self.index.value, - default_value=( - self.default_value_select.value - if self.show_enum_defaults - else self.default_value_input.value - ) - or None, - extra_kwargs=self.extra_kwargs or None, - metadata=ModelFieldMetadata( - is_created_at_timestamp=( - self.created_at.value if self.show_metadata else False - ), - is_updated_at_timestamp=( - self.updated_at.value if self.show_metadata else False - ), - is_foreign_key=False, - ), - ) - self.close() - except ValueError as exc: - notify_value_error(exc) - return - - def _set_field(self, field: ModelField) -> None: - state.selected_field = field - if not field: - return - - self.field_name.value = field.name - self.field_type.value = field.type - self.primary_key.value = field.primary_key - self.nullable.value = field.nullable - self.unique.value = field.unique - self.index.value = field.index - if field.type == FieldDataTypeEnum.ENUM and field.type_enum: - self.enum_selector.value = field.type_enum - self.enum_selector.update() - if field.default_value: - self.default_value_select.value = field.default_value - self.default_value_select.update() - elif field.default_value: - self.default_value_input.value = field.default_value - self.default_value_input.update() - self.created_at.value = field.metadata.is_created_at_timestamp - self.updated_at.value = field.metadata.is_updated_at_timestamp - self.show_metadata = field.type == FieldDataTypeEnum.DATETIME - self.show_enum_selector = field.type == FieldDataTypeEnum.ENUM - self.extra_kwargs = field.extra_kwargs.copy() if field.extra_kwargs else {} - self.kwargs_container.clear() - - if field.extra_kwargs: - for key, value in field.extra_kwargs.items(): - self._add_kwarg_row(key, str(value)) - - if field.type_enum and self.show_enum_selector: - self.enum_selector.value = field.type_enum - self.enum_selector.update() - - def open(self, field: ModelField | None = None) -> None: - if field: - self._set_field(field) - super().open() diff --git a/fastapi_forge/frontend/modals/relation_modal.py b/fastapi_forge/frontend/modals/relation_modal.py deleted file mode 100644 index 40e9589..0000000 --- a/fastapi_forge/frontend/modals/relation_modal.py +++ /dev/null @@ -1,158 +0,0 @@ -from abc import ABC, abstractmethod -from collections.abc import Callable - -from nicegui import ui - -from fastapi_forge.enums import OnDeleteEnum -from fastapi_forge.frontend.notifications import notify_value_error -from fastapi_forge.schemas import Model, ModelRelationship - - -class BaseRelationModal(ui.dialog, ABC): - title: str - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._build_common_ui() - - def _build_common_ui(self) -> None: - with self, ui.card().classes("w-full max-w-2xl shadow-lg rounded-lg"): - with ui.row().classes("w-full justify-between items-center p-4 border-b"): - ui.label(self.title).classes("text-xl font-semibold") - - with ui.column().classes("w-full p-6 space-y-4"): - with ui.grid(columns=2).classes("w-full gap-4"): - self.field_name = ui.input(label="Field Name").props( - "outlined dense" - ) - self.target_model = ui.select( - label="Target Model", - options=[], - ).props("outlined dense") - self.on_delete = ui.select( - label="On Delete", - options=list(OnDeleteEnum), - value=OnDeleteEnum.CASCADE, - ).props("outlined dense") - self.back_populates = ui.input(label="Back Populates").props( - "outlined dense" - ) - - with ui.row().classes("w-full justify-between gap-4"): - self.nullable = ui.checkbox("Nullable").props("dense") - self.index = ui.checkbox("Index").props("dense") - self.unique = ui.checkbox("Unique").props("dense") - - with ui.row().classes("w-full justify-end p-4 border-t gap-2"): - self._build_action_buttons() - - @abstractmethod - def _build_action_buttons(self) -> None: - pass - - def _reset(self) -> None: - self.field_name.value = "" - self.target_model.value = None - self.back_populates.value = "" - self.on_delete.value = None - self.nullable.value = False - self.index.value = False - self.unique.value = False - - -class AddRelationModal(BaseRelationModal): - title = "Add Relationship" - - def __init__(self, on_add_relation: Callable): - super().__init__() - self.on_add_relation = on_add_relation - - def _build_action_buttons(self) -> None: - ui.button("Cancel", on_click=self.close) - ui.button( - "Add Relation", - on_click=self._add_relation, - ) - - def _add_relation(self) -> None: - try: - self.on_add_relation( - field_name=self.field_name.value, - target_model=self.target_model.value, - back_populates=self.back_populates.value or None, - nullable=self.nullable.value, - index=self.index.value, - unique=self.unique.value, - on_delete=self.on_delete.value, - ) - self.close() - except ValueError as exc: - notify_value_error(exc) - - def open(self, models: list[Model]) -> None: - self.target_model.options = [model.name for model in models] - self.target_model.value = models[0].name if models else None - super().open() - - -class UpdateRelationModal(BaseRelationModal): - title = "Update Relationship" - - def __init__(self, on_update_relation: Callable): - super().__init__() - self.on_update_relation = on_update_relation - self.selected_relation: ModelRelationship | None = None - - def _build_action_buttons(self) -> None: - ui.button("Cancel", on_click=self.close) - ui.button( - "Update Relation", - on_click=self._update_relation, - ) - - def _update_relation(self) -> None: - if not self.selected_relation: - return - - try: - self.on_update_relation( - field_name=self.field_name.value, - target_model=self.target_model.value, - back_populates=self.back_populates.value, - nullable=self.nullable.value, - index=self.index.value, - unique=self.unique.value, - on_delete=self.on_delete.value, - ) - self.close() - except ValueError as exc: - notify_value_error(exc) - - def _set_relation(self, relation: ModelRelationship) -> None: - self.selected_relation = relation - if relation: - self.field_name.value = relation.field_name - self.target_model.value = relation.target_model - self.nullable.value = relation.nullable - self.index.value = relation.index - self.unique.value = relation.unique - self.back_populates.value = relation.back_populates - self.on_delete.value = relation.on_delete - - def open( - self, - relation: ModelRelationship | None = None, - models: list[Model] | None = None, - ) -> None: - if relation and models: - self._set_relation(relation) - self.target_model.options = [model.name for model in models] - default_target_model = next( - (model for model in models if model.name == relation.target_model), - None, - ) - if default_target_model: - self.target_model.value = default_target_model.name - self.target_model.options = [model.name for model in models] - - super().open() diff --git a/fastapi_forge/frontend/notifications.py b/fastapi_forge/frontend/notifications.py deleted file mode 100644 index 6c94b15..0000000 --- a/fastapi_forge/frontend/notifications.py +++ /dev/null @@ -1,46 +0,0 @@ -from nicegui import ui -from pydantic import ValidationError - - -def notify_validation_error(e: ValidationError) -> None: - msg = e.errors()[0].get("msg", "Something went wrong.") - ui.notify(msg, type="negative") - - -def notify_value_error(e: ValueError) -> None: - ui.notify(str(e), type="negative") - - -def notify_model_exists(model_name: str) -> None: - ui.notify( - f"Model '{model_name}' already exists.", - type="negative", - ) - - -def notify_enum_exists(enum_name: str) -> None: - ui.notify( - f"Enum '{enum_name}' already exists.", - type="negative", - ) - - -def notify_field_exists(field_name: str, model_name: str) -> None: - ui.notify( - f"Model' {model_name}' already has field '{field_name}'.", - type="negative", - ) - - -def notify_enum_value_exists(value_name: str, enum_name: str) -> None: - ui.notify( - f"Enum' {enum_name}' already has value '{value_name}'.", - type="negative", - ) - - -def notify_something_went_wrong() -> None: - ui.notify( - "Something went wrong...", - type="warning", - ) diff --git a/fastapi_forge/frontend/panels/__init__.py b/fastapi_forge/frontend/panels/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/fastapi_forge/frontend/panels/enum_editor_panel.py b/fastapi_forge/frontend/panels/enum_editor_panel.py deleted file mode 100644 index f1c562d..0000000 --- a/fastapi_forge/frontend/panels/enum_editor_panel.py +++ /dev/null @@ -1,166 +0,0 @@ -from typing import Any - -from nicegui import ui -from pydantic import ValidationError - -from fastapi_forge.frontend import validation -from fastapi_forge.frontend.constants import ENUM_COLUMNS -from fastapi_forge.frontend.modals import ( - AddEnumValueModal, - UpdateEnumValueModal, -) -from fastapi_forge.frontend.notifications import ( - notify_enum_value_exists, - notify_validation_error, -) -from fastapi_forge.frontend.state import state -from fastapi_forge.schemas import CustomEnum, CustomEnumValue - - -class EnumEditorPanel(ui.card): - def __init__(self): - super().__init__() - self.visible = False - - state.select_enum_fn = self.set_selected_enum - state.deselect_enum_fn = self._handle_deselect_enum - - self.add_value_modal = AddEnumValueModal( - on_add_value=self._handle_modal_add_value - ) - self.update_value_modal = UpdateEnumValueModal( - on_update_value=self._handle_update_value - ) - - self._build() - - def _show_code_preview(self) -> None: - if state.selected_enum: - with ( - ui.dialog() as modal, - ui.card().classes("no-shadow border-[1px]"), - ): - ui.code(state.selected_enum.class_definition).classes("w-full") - modal.open() - - def _build(self) -> None: - with self: - with ui.row().classes("w-full justify-between items-center"): - with ui.row().classes("gap-4 items-center"): - self.enum_name_display = ui.label().classes("text-lg font-bold") - ui.button( - icon="visibility", - on_click=self._show_code_preview, - ).tooltip("Preview Python enum code") - - ui.button( - icon="add", on_click=lambda: self.add_value_modal.open() - ).classes("self-end").tooltip("Add Value") - - with ui.expansion("Values", value=True).classes("w-full"): - self.table = ui.table( - columns=ENUM_COLUMNS, - rows=[], - row_key="name", - selection="single", - on_select=lambda e: self._on_select_value(e.selection), - ).classes("w-full no-shadow border-[1px]") - - with ui.row().classes("w-full justify-end gap-2"): - ui.button( - icon="edit", - on_click=lambda: self.update_value_modal.open( - state.selected_enum_value, - ), - ).bind_visibility_from(state, "selected_enum_value") - ui.button( - icon="delete", on_click=self._handle_delete_enum_value - ).bind_visibility_from(state, "selected_enum_value") - - def refresh(self) -> None: - if state.selected_enum is None: - return - self.table.rows = [value.model_dump() for value in state.selected_enum.values] - self.add_value_modal.close() - - def set_selected_enum(self, enum: CustomEnum) -> None: - self.refresh() - self.enum_name_display.text = enum.name - self.visible = True - - def _on_select_value(self, selection: list[dict[str, Any]]) -> None: - if not state.selected_enum or not selection: - return - - name = selection[0].get("name") - state.selected_enum_value = next( - ( - enum_value - for enum_value in state.selected_enum.values - if enum_value.name == name - ), - None, - ) - - def _handle_delete_enum_value(self) -> None: - if state.selected_enum is None or state.selected_enum_value is None: - return - state.selected_enum.values.remove(state.selected_enum_value) - self.refresh() - - def _enum_value_exists(self, value_name: str) -> bool: - return any( - enum_value.name == value_name for enum_value in state.selected_enum.values - ) - - def _handle_modal_add_value(self, *, name: str, value: str) -> None: - if state.selected_enum is None: - return - - try: - validation.raise_if_missing_fields([("Name", name), ("Value", value)]) - except ValueError as exc: - raise exc - - if self._enum_value_exists(name): - notify_enum_value_exists(name, state.selected_enum.name) - return - - try: - enum_value_input = CustomEnumValue( - name=name, - value=value, - ) - - state.selected_enum.values.append(enum_value_input) - self.refresh() - except ValidationError as exc: - notify_validation_error(exc) - - def _handle_update_value(self, *, name: str, value: str) -> None: - if state.selected_enum is None or state.selected_enum_value is None: - return - - try: - validation.raise_if_missing_fields([("Name", name), ("Value", value)]) - except ValueError as exc: - raise exc - - if self._enum_value_exists(name): - notify_enum_value_exists(name, state.selected_enum.name) - return - - try: - enum_value_input = CustomEnumValue( - name=name, - value=value, - ) - - enum_index = state.selected_enum.values.index(state.selected_enum_value) - state.selected_enum.values[enum_index] = enum_value_input - self.refresh() - except ValidationError as exc: - notify_validation_error(exc) - - def _handle_deselect_enum(self) -> None: - self.visible = False diff --git a/fastapi_forge/frontend/panels/item_editor_panel.py b/fastapi_forge/frontend/panels/item_editor_panel.py deleted file mode 100644 index ea463c5..0000000 --- a/fastapi_forge/frontend/panels/item_editor_panel.py +++ /dev/null @@ -1,26 +0,0 @@ -from nicegui import ui - -from fastapi_forge.frontend.panels.enum_editor_panel import EnumEditorPanel -from fastapi_forge.frontend.panels.model_editor_panel import ModelEditorPanel -from fastapi_forge.frontend.state import state - - -class ItemEditorPanel: - def __init__(self): - self._build() - state.display_item_editor_fn = self._display_item_editor_panel - - def _build(self) -> None: - self._display_item_editor_panel() - - @ui.refreshable - def _display_item_editor_panel(self) -> None: - with ui.column().classes("w-full h-full items-center justify-center mt-4"): - if state.show_models: - ModelEditorPanel().classes( - "shadow-2xl dark:shadow-none min-w-[700px] max-w-[800px]" - ) - if state.show_enums: - EnumEditorPanel().classes( - "shadow-2xl dark:shadow-none min-w-[500px] max-w-[600px]" - ) diff --git a/fastapi_forge/frontend/panels/left_panel.py b/fastapi_forge/frontend/panels/left_panel.py deleted file mode 100644 index ad8b468..0000000 --- a/fastapi_forge/frontend/panels/left_panel.py +++ /dev/null @@ -1,125 +0,0 @@ -from pathlib import Path - -from nicegui import ui -from pydantic import ValidationError - -from fastapi_forge.frontend.components.item_create import EnumCreate, ModelCreate -from fastapi_forge.frontend.components.item_row import EnumRow, ModelRow -from fastapi_forge.frontend.constants import ( - SELECTED_ENUM_TEXT_COLOR, - SELECTED_MODEL_TEXT_COLOR, -) -from fastapi_forge.frontend.notifications import notify_validation_error -from fastapi_forge.frontend.state import state -from fastapi_forge.project_io import create_yaml_project_exporter - - -class NavigationTabs(ui.row): - def __init__(self): - super().__init__() - self._build() - - def _build(self) -> None: - with self.classes("w-full"): - self.toggle = ( - ui.toggle( - {"models": "Models", "enums": "Enums"}, - value="models", - on_change=self._on_toggle_change, - ) - .props("rounded spread") - .classes("w-full") - ) - - def _on_toggle_change(self) -> None: - if self.toggle.value == "models": - state.switch_item_editor(show_models=True) - else: - state.switch_item_editor(show_enums=True) - - -class ExportButton: - def __init__(self): - self._build() - - def _build(self) -> None: - ui.button( - "Export", - on_click=self._export_project, - icon="file_download", - ).classes("w-full py-3 text-lg font-bold").tooltip( - "Generates a YAML file containing the project configuration.", - ) - - async def _export_project(self) -> None: - """Export the project configuration to a YAML file.""" - try: - spec = state.get_project_spec() - exporter = create_yaml_project_exporter() - await exporter.export_project(spec) - ui.notify( - "Project configuration exported to " - f"{Path.cwd() / spec.project_name}.yaml", - type="positive", - ) - except ValidationError as exc: - notify_validation_error(exc) - except FileNotFoundError as exc: - ui.notify(f"File not found: {exc}", type="negative") - except Exception as exc: - ui.notify(f"An unexpected error occurred: {exc}", type="negative") - - -class LeftPanel(ui.left_drawer): - def __init__(self): - super().__init__(value=True, elevated=False, bottom_corner=True) - - state.render_content_fn = self._render_content - - self._build() - - def _build(self) -> None: - self.clear() - with self, ui.column().classes("items-align content-start w-full"): - NavigationTabs() - - self._render_content() - - ExportButton() - - @ui.refreshable - def _render_content(self) -> None: - with ui.column(): - EnumCreate() if state.show_enums else ModelCreate() - - self.content_list = ui.column().classes("items-align content-start w-full") - - if state.show_models: - self._render_models_list() - elif state.show_enums: - self._render_enums_list() - - def _render_models_list(self) -> None: - with self.content_list: - for model in state.models: - ModelRow( - model, - color=( - SELECTED_MODEL_TEXT_COLOR - if model == state.selected_model - else None - ), - icon="security" if model.metadata.is_auth_model else None, - ) - - def _render_enums_list(self) -> None: - with self.content_list: - for custom_enum in state.custom_enums: - EnumRow( - custom_enum, - color=( - SELECTED_ENUM_TEXT_COLOR - if custom_enum == state.selected_enum - else None - ), - ) diff --git a/fastapi_forge/frontend/panels/model_editor_panel.py b/fastapi_forge/frontend/panels/model_editor_panel.py deleted file mode 100644 index a386e7c..0000000 --- a/fastapi_forge/frontend/panels/model_editor_panel.py +++ /dev/null @@ -1,681 +0,0 @@ -from typing import Any - -from nicegui import ui -from pydantic import ValidationError - -from fastapi_forge.enums import FieldDataTypeEnum, OnDeleteEnum -from fastapi_forge.frontend import validation -from fastapi_forge.frontend.constants import ( - DEFAULT_AUTH_USER_FIELDS, - FIELD_COLUMNS, - RELATIONSHIP_COLUMNS, -) -from fastapi_forge.frontend.modals import ( - AddFieldModal, - AddRelationModal, - UpdateFieldModal, - UpdateRelationModal, -) -from fastapi_forge.frontend.notifications import ( - notify_field_exists, - notify_validation_error, - notify_value_error, -) -from fastapi_forge.frontend.state import state -from fastapi_forge.schemas import ( - Model, - ModelField, - ModelFieldMetadata, - ModelRelationship, -) - - -class ModelEditorPanel(ui.card): - def __init__(self): - super().__init__() - self.visible = False - - state.select_model_fn = self.set_selected_model - state.deselect_model_fn = self.deselect_model - state.render_model_editor_fn = self.refresh - state.render_actions_fn = self._render_action_group - - self.add_field_modal: AddFieldModal = AddFieldModal( - on_add_field=self._handle_modal_add_field, - ) - self.add_relation_modal: AddRelationModal = AddRelationModal( - on_add_relation=self._handle_modal_add_relation, - ) - self.update_field_modal: UpdateFieldModal = UpdateFieldModal( - on_update_field=self._handle_update_field, - ) - self.update_relation_modal: UpdateRelationModal = UpdateRelationModal( - on_update_relation=self._handle_update_relation, - ) - - self._build() - - def _show_code_preview(self) -> None: - if state.selected_model: - with ( - ui.dialog() as modal, - ui.card().classes("no-shadow border-[1px]"), - ): - model_renderer = state.get_render_manager().get_renderer("model") - code = model_renderer.render(state.selected_model.get_preview()) - code = code.split("class ")[1] - code = f"# ID is inherited from the `Base` class\nclass {code}" - ui.code(code).classes("w-full") - modal.open() - - def _toggle_auth_model(self) -> None: - if not state.selected_model or not state.use_builtin_auth: - return - - if not state.selected_model.metadata.is_auth_model and any( - m.metadata.is_auth_model for m in state.models - ): - ui.notify( - "Cannot have more than one authentication model.", type="negative" - ) - return - - model = state.selected_model - model.metadata.is_auth_model = not model.metadata.is_auth_model - - if not model.metadata.is_auth_model: - self._remove_auth_fields(model) - if state.render_model_editor_fn: - state.render_model_editor_fn() - - if state.render_content_fn: - state.render_content_fn.refresh() - - self._render_action_group.refresh() - - if model.metadata.is_auth_model: - self._setup_auth_model_fields(model) - - def _remove_auth_fields(self, model: Model) -> None: - for field_name in ("email", "password"): - if field := next((f for f in model.fields if f.name == field_name), None): - model.fields.remove(field) - - def _setup_auth_model_fields(self, model: Model) -> None: - self._remove_auth_fields(model) - id_index = 0 - insert_position = id_index + 1 if id_index >= 0 else 0 - for field in reversed(DEFAULT_AUTH_USER_FIELDS): - model.fields.insert(insert_position, field) - - self._refresh_table(model.fields) - - @ui.refreshable - def _render_action_group(self) -> None: - ui.button( - icon="security", - on_click=self._toggle_auth_model, - color=( - "green" - if state.use_builtin_auth - and state.selected_model - and state.selected_model.metadata.is_auth_model - else "grey" - ), - ).tooltip("Authentication model").bind_visibility_from( - state, "use_builtin_auth" - ) - - def _build(self) -> None: - with self: - with ui.row().classes("w-full justify-between items-center"): - with ui.row().classes("gap-4 items-center"): - self.model_name_display = ui.label().classes("text-lg font-bold") - ui.button( - icon="visibility", - on_click=self._show_code_preview, - ).tooltip("Preview SQLAlchemy model code") - - with ui.row().classes("gap-2 items-center"): - self._render_action_group() - with ( - ui.button(icon="menu").tooltip("Generate"), - ui.menu(), - ui.column().classes("gap-0 p-2"), - ): - self.create_endpoints_switch = ui.switch( - "Endpoints", - value=True, - on_change=lambda v: setattr( - state.selected_model.metadata, - "create_endpoints", - v.value, - ), - ) - self.create_tests_switch = ui.switch( - "Tests", - value=True, - on_change=lambda v: setattr( - state.selected_model.metadata, - "create_tests", - v.value, - ), - ) - self.create_daos_switch = ui.switch( - "DAOs", - value=True, - on_change=lambda v: setattr( - state.selected_model.metadata, - "create_daos", - v.value, - ), - ) - self.create_dtos_switch = ui.switch( - "DTOs", - value=True, - on_change=lambda v: setattr( - state.selected_model.metadata, - "create_dtos", - v.value, - ), - ) - - with ( - ui.button(icon="bolt", color="amber") - .classes("self-end") - .tooltip("Quick-Add"), - ui.menu(), - ): - self.primary_key_item = ui.menu_item( - "Primary Key", - on_click=lambda: self._toggle_quick_add( - "id", - is_primary_key=True, - ), - ) - self.created_at_item = ui.menu_item( - "Created At", - on_click=lambda: self._toggle_quick_add( - "created_at", - is_created_at_timestamp=True, - ), - ) - self.updated_at_item = ui.menu_item( - "Updated At", - on_click=lambda: self._toggle_quick_add( - "updated_at", - is_updated_at_timestamp=True, - ), - ) - - with ui.button(icon="add").classes("self-end"), ui.menu(): - ui.menu_item( - "Field", - on_click=lambda: self.add_field_modal.open(), - ) - ui.menu_item( - "Relationship", - on_click=lambda: self.add_relation_modal.open( - models=state.models, - ), - ) - - with ui.expansion("Fields", value=True).classes("w-full"): - self.table = ui.table( - columns=FIELD_COLUMNS, - rows=[], - row_key="name", - selection="single", - on_select=lambda e: self._on_select_field(e.selection), - ).classes("w-full no-shadow border-[1px]") - - with ui.row().classes("w-full justify-end gap-2"): - ui.button( - icon="edit", - on_click=lambda: self.update_field_modal.open( - state.selected_field, - ), - ).bind_visibility_from(state, "selected_field") - ui.button( - icon="delete", - on_click=self._delete_field, - ).bind_visibility_from(state, "selected_field") - - with ui.expansion("Relationships", value=True).classes("w-full"): - self.relationship_table = ui.table( - columns=RELATIONSHIP_COLUMNS, - rows=[], - row_key="field_name", - selection="single", - on_select=lambda e: self._on_select_relation(e.selection), - ).classes("w-full no-shadow border-[1px]") - - with ui.row().classes("w-full justify-end gap-2"): - ui.button( - icon="edit", - on_click=lambda: self.update_relation_modal.open( - state.selected_relation, - state.models, - ), - ).bind_visibility_from(state, "selected_relation") - ui.button( - icon="delete", - on_click=self._delete_relation, - ).bind_visibility_from(state, "selected_relation") - - def _toggle_quick_add( - self, - name: str, - is_primary_key: bool = False, - is_created_at_timestamp: bool = False, - is_updated_at_timestamp: bool = False, - ) -> None: - if not state.selected_model: - return - - if is_primary_key: - existing_pk = next( - (field for field in state.selected_model.fields if field.primary_key), - None, - ) - if existing_pk: - self._delete(existing_pk) - return - - self._add_field( - name=name, - type="UUID", - primary_key=True, - nullable=False, - unique=True, - index=True, - ) - return - - attr = ( - "is_created_at_timestamp" - if is_created_at_timestamp - else "is_updated_at_timestamp" - ) - - existing_quick_add = next( - ( - field - for field in state.selected_model.fields - if getattr(field.metadata, attr) is True - ), - None, - ) - - if existing_quick_add: - self._delete(existing_quick_add) - return - - self._add_field( - name=name, - type="DateTime", - primary_key=False, - nullable=False, - unique=False, - index=False, - default_value="datetime.now(timezone.utc)", - extra_kwargs=( - {"onupdate": "datetime.now(timezone.utc)"} - if is_updated_at_timestamp - else None - ), - metadata=ModelFieldMetadata( - is_created_at_timestamp=is_created_at_timestamp, - is_updated_at_timestamp=is_updated_at_timestamp, - ), - ) - - def _handle_modal_add_field( - self, - **kwargs, - ) -> None: - try: - self._add_field(**kwargs) - self.add_field_modal.close() - except ValueError as exc: - notify_value_error(exc) - - def _handle_modal_add_relation( - self, - field_name: str, - target_model: str, - on_delete: OnDeleteEnum, - nullable: bool, - index: bool, - unique: bool, - back_populates: str | None = None, - ) -> None: - if not state.selected_model: - return - - try: - validation.raise_if_missing_fields( - [ - ("Field Name", field_name), - ("Target Model", target_model), - ("On Delete", on_delete), - ] - ) - except ValueError as exc: - raise exc - - target_model_instance = next( - (model for model in state.models if model.name == target_model), - None, - ) - if not target_model_instance: - ui.notify(f"Model '{target_model}' not found.", type="negative") - return - - if field_name in [field.name for field in state.selected_model.fields]: - ui.notify(f"Field '{field_name}' already exists.", type="negative") - return - - try: - relationship = ModelRelationship( - field_name=field_name, - target_model=target_model_instance.name, - back_populates=back_populates, - nullable=nullable, - index=index, - unique=unique, - on_delete=on_delete, - ) - except ValidationError as exc: - notify_validation_error(exc) - return - - state.selected_model.relationships.append(relationship) - - self._refresh_relationship_table(state.selected_model.relationships) - - def refresh(self) -> None: - if state.selected_model is None: - return - self._refresh_table(state.selected_model.fields) - self._refresh_relationship_table(state.selected_model.relationships) - - def _refresh_table(self, fields: list[ModelField]) -> None: - if state.selected_model is None: - return - self.table.rows = [field.model_dump() for field in fields] - - quick_add_primary_key_enabled = any(field.primary_key for field in fields) - quick_add_created_at_enabled = any( - field.metadata.is_created_at_timestamp for field in fields - ) - quick_add_updated_at_enabled = any( - field.metadata.is_updated_at_timestamp for field in fields - ) - - self.primary_key_item.enabled = not quick_add_primary_key_enabled - self.created_at_item.enabled = not quick_add_created_at_enabled - self.updated_at_item.enabled = not quick_add_updated_at_enabled - - self._deselect_field() - - def _refresh_relationship_table( - self, - relationships: list[ModelRelationship], - ) -> None: - if state.selected_model is None: - return - self.relationship_table.rows = [ - relationship.model_dump() for relationship in relationships - ] - self._deselect_relation() - - def _field_name_exists(self, field_name: str) -> bool: - return any(field.name == field_name for field in state.selected_model.fields) - - def _add_field( - self, - *, - name: str, - type: str, - primary_key: bool, - nullable: bool, - unique: bool, - index: bool, - type_enum: str | None = None, - default_value: str | None = None, - extra_kwargs: dict[str, Any] | None = None, - metadata: ModelFieldMetadata | None = None, - ) -> None: - if state.selected_model is None: - return - - try: - validation.raise_if_missing_fields( - [("Field Name", name), ("Field Type", type)] - ) - except ValueError as exc: - raise exc - - if self._field_name_exists(name): - notify_field_exists(name, state.selected_model.name) - return - - field_type = FieldDataTypeEnum(type) - if type_enum and field_type != FieldDataTypeEnum.ENUM: - type_enum = None - - try: - field_input = ModelField( - name=name, - type=field_type, - type_enum=type_enum, - primary_key=primary_key, - nullable=nullable, - unique=unique, - index=index, - default_value=default_value, - extra_kwargs=extra_kwargs, - ) - - if metadata: - field_input.metadata = metadata - - state.selected_model.fields.append(field_input) - self._refresh_table(state.selected_model.fields) - - except ValidationError as exc: - notify_validation_error(exc) - - def _deselect_field(self) -> None: - state.selected_field = None - self.table.selected = [] - - def _deselect_relation(self) -> None: - state.selected_relation = None - self.relationship_table.selected = [] - - def _on_select_field(self, selection: list[dict[str, Any]]) -> None: - if not state.selected_model or not selection: - self._deselect_field() - return - - name = selection[0].get("name") - - if ( - state.selected_model.metadata.is_auth_model - and state.use_builtin_auth - and name in ("password", "email") - ): - ui.notify( - f"Cannot edit {name} field in authentication model.", - type="warning", - ) - self._deselect_field() - return - - state.selected_field = next( - (field for field in state.selected_model.fields if field.name == name), None - ) - - def _on_select_relation(self, selection: list[dict[str, Any]]) -> None: - if not state.selected_model: - return - if not selection: - self._deselect_relation() - return - state.selected_relation = next( - ( - relation - for relation in state.selected_model.relationships - if relation.field_name == selection[0]["field_name"] - ), - None, - ) - - def _handle_update_field( - self, - name: str, - type: str, - primary_key: bool, - nullable: bool, - unique: bool, - index: bool, - metadata: ModelFieldMetadata, - type_enum: str | None = None, - default_value: str | None = None, - extra_kwargs: dict[str, Any] | None = None, - ) -> None: - if not state.selected_model or not state.selected_field: - return - - if ( - state.selected_model - and state.selected_model.metadata.is_auth_model - and state.use_builtin_auth - ): - return - - try: - validation.raise_if_missing_fields( - [("Field Name", name), ("Field Type", type)] - ) - except ValueError as exc: - raise exc - - if state.selected_field.name != name and self._field_name_exists(name): - notify_field_exists(name, state.selected_model.name) - return - - field_type = FieldDataTypeEnum(type) - if type_enum and field_type != FieldDataTypeEnum.ENUM: - type_enum = None - - try: - field_input = ModelField( - name=name, - type=field_type, - type_enum=type_enum, - primary_key=primary_key, - nullable=nullable, - unique=unique, - index=index, - default_value=default_value, - extra_kwargs=extra_kwargs, - metadata=metadata, - ) - - model_index = state.selected_model.fields.index(state.selected_field) - state.selected_model.fields[model_index] = field_input - self._refresh_table(state.selected_model.fields) - - except ValidationError as exc: - notify_validation_error(exc) - - def _handle_update_relation( - self, - field_name: str, - target_model: str, - nullable: bool = False, - index: bool = False, - unique: bool = False, - on_delete: OnDeleteEnum = OnDeleteEnum.CASCADE, - back_populates: str | None = None, - ) -> None: - if not state.selected_model or not state.selected_relation: - return - - try: - validation.raise_if_missing_fields( - [ - ("Field Name", field_name), - ("Target Model", target_model), - ("On Delete", on_delete), - ] - ) - except ValueError as exc: - raise exc - - target_model_instance = next( - (model for model in state.models if model.name == target_model), - None, - ) - if not target_model_instance: - ui.notify(f"Model '{target_model}' not found.", type="negative") - return - - if ( - field_name in [field.name for field in state.selected_model.fields] - and field_name != state.selected_relation.field_name - ): - ui.notify(f"Field '{field_name}' already exists.", type="negative") - return - try: - relationship = ModelRelationship( - field_name=field_name, - target_model=target_model_instance.name, - back_populates=back_populates or None, - nullable=nullable, - index=index, - unique=unique, - on_delete=on_delete, - ) - except ValidationError as exc: - notify_validation_error(exc) - return - - model_index = state.selected_model.relationships.index(state.selected_relation) - state.selected_model.relationships[model_index] = relationship - self._refresh_relationship_table(state.selected_model.relationships) - - def _delete(self, field: ModelField) -> None: - if not state.selected_model: - ui.notify("No model selected.", type="negative") - return - state.selected_model.fields.remove(field) - self._refresh_table(state.selected_model.fields) - - def _delete_relation(self) -> None: - if state.selected_model and state.selected_relation: - state.selected_model.relationships.remove(state.selected_relation) - self._refresh_relationship_table(state.selected_model.relationships) - - def _delete_field(self) -> None: - if state.selected_model and state.selected_field: - self._delete(state.selected_field) - - def set_selected_model(self, model: Model) -> None: - self.model_name_display.text = model.name - metadata = model.metadata - - self.create_endpoints_switch.value = metadata.create_endpoints - self.create_tests_switch.value = metadata.create_tests - self.create_dtos_switch.value = metadata.create_dtos - self.create_daos_switch.value = metadata.create_daos - - self._refresh_table(model.fields) - self._refresh_relationship_table(model.relationships) - self.visible = True - - def deselect_model(self) -> None: - self.visible = False diff --git a/fastapi_forge/frontend/panels/project_config_panel.py b/fastapi_forge/frontend/panels/project_config_panel.py deleted file mode 100644 index 078e2b5..0000000 --- a/fastapi_forge/frontend/panels/project_config_panel.py +++ /dev/null @@ -1,449 +0,0 @@ -from pathlib import Path - -from nicegui import ui -from nicegui.events import ValueChangeEventArguments -from pydantic import ValidationError - -from fastapi_forge.core.build import build_fastapi_project -from fastapi_forge.enums import FieldDataTypeEnum -from fastapi_forge.frontend.constants import ( - DEFAULT_AUTH_USER_FIELDS, - DEFAULT_AUTH_USER_ROLE_ENUM_NAME, -) -from fastapi_forge.frontend.notifications import ( - notify_validation_error, - notify_value_error, -) -from fastapi_forge.frontend.state import state -from fastapi_forge.project_io import create_postgres_project_loader -from fastapi_forge.schemas import ( - CustomEnum, - CustomEnumValue, - Model, - ModelField, - ModelFieldMetadata, - ModelMetadata, -) -from fastapi_forge.type_info_registry import enum_registry - - -class ProjectConfigPanel(ui.right_drawer): - def __init__(self): - super().__init__(value=True, elevated=False, bottom_corner=True) - self._build() - self._bind_state_to_ui() - self._update_taskiq_state() - - async def _confirm_upload(self) -> bool: - dialog = ui.dialog() - with dialog, ui.card().classes("w-full max-w-md p-6 text-center"): - ui.icon("warning", color="orange-500").classes("text-4xl self-center") - ui.markdown( - "⚠️ Current project configuration will be overwritten!\n\n" - "It is **highly recommended** to export the current project before proceeding." - ).classes("text-center mb-4") - - confirm_checkbox = ui.checkbox("I understand and want to proceed") - - with ui.row().classes("w-full justify-center gap-4 mt-4"): - ui.button("Cancel", color="primary", on_click=dialog.close) - ui.button( - "Continue", - color="negative", - on_click=lambda: dialog.submit(confirm_checkbox.value), - ).bind_enabled_from(confirm_checkbox, "value") - - return await dialog - - async def _load_from_conn_string(self, conn_string: str) -> None: - try: - confirmed = await self._confirm_upload() - if not confirmed: - ui.notify("Upload cancelled", type="warning") - return - - enum_registry.clear() - postgres_loader = create_postgres_project_loader(conn_string=conn_string) - project_spec = postgres_loader.load() - - state.initialize_from_project(project_spec) - self.upload_menu.close() - ui.notify( - "Successfully loaded project configuration from connection string!", - type="positive", - ) - - except ValueError as exc: - notify_value_error(exc) - except Exception as exc: - ui.notify(f"Error loading project: {exc!s}", type="negative") - - def _build(self) -> None: - with ( - self, - ui.column().classes( - "items-align content-start w-full gap-4", - ) as self.column, - ): - with ui.column().classes("w-full gap-2"): - with ui.row().classes("w-full justify-between items-center"): - ui.label("Project Name").classes("text-lg font-bold") - - with ( - ui.menu() as self.upload_menu, - ui.column().classes("p-2 w-full"), - ui.row().classes("items-center w-full gap-2"), - ): - text_input = ui.input( - "Postgres connection string", - placeholder="postgresql://user:pass@host/database", - ).classes("flex-grow w-[250px]") - ui.button( - "Upload", - on_click=lambda: self._load_from_conn_string( - text_input.value - ), - ).props("unelevated") - - ui.button(icon="upload", on_click=self.upload_menu.open).props( - "round" - ).tooltip("Upload from database") - - self.project_name = ( - ui.input( - placeholder="Project Name", - value=state.project_name, - ) - .classes("w-full") - .bind_value_from(state, "project_name") - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Database").classes("text-lg font-bold") - self.use_postgres = ( - ui.checkbox( - "Postgres", - value=state.use_postgres, - ) - .classes("w-full") - .bind_value_from(state, "use_postgres") - ) - - self.use_mysql = ( - ui.checkbox("MySQL") - .classes("w-full") - .tooltip("Coming soon!") - .set_enabled(False) - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Migrations").classes("text-lg font-bold") - self.use_alembic = ( - ui.checkbox("Alembic", value=state.use_alembic) - .classes("w-full") - .bind_enabled_from(self.use_postgres, "value") - .bind_value_from(state, "use_alembic") - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Authentication").classes("text-lg font-bold") - self.use_builtin_auth = ( - ui.checkbox( - "JWT Auth", - value=state.use_builtin_auth, - on_change=self._handle_builtin_auth_change, - ) - .tooltip( - "Authentication is built in the API itself, using JWT.", - ) - .classes("w-full") - .bind_enabled_from(self.use_postgres, "value") - .bind_value_from(state, "use_builtin_auth") - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Messaging").classes("text-lg font-bold") - self.use_rabbitmq = ( - ui.checkbox( - "RabbitMQ", - value=state.use_rabbitmq, - on_change=self._update_taskiq_state, - ) - .classes("w-full") - .bind_value_from(state, "use_rabbitmq") - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Task Queues").classes("text-lg font-bold") - self.use_taskiq = ( - ui.checkbox( - "Taskiq", - value=state.use_taskiq, - on_change=self._update_taskiq_state, - ) - .classes("w-full") - .tooltip("Requires Redis and RabbitMQ to be enabled.") - .bind_value_from(state, "use_taskiq") - ) - - self.use_celery = ( - ui.checkbox("Celery") - .classes("w-full") - .tooltip("Coming soon!") - .set_enabled(False) - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Caching").classes("text-lg font-bold") - self.use_redis = ( - ui.checkbox( - "Redis", - value=state.use_redis, - on_change=self._update_taskiq_state, - ) - .classes("w-full") - .bind_value_from(state, "use_redis") - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Observability").classes("text-lg font-bold") - self.use_prometheus = ( - ui.checkbox("Prometheus", value=state.use_prometheus) - .classes("w-full") - .bind_value_from(state, "use_prometheus") - .tooltip("Collect and query metrics with Prometheus") - ) - self.use_logfire = ( - ui.checkbox("Logfire", value=state.use_logfire) - .classes("w-full") - .bind_value_from(state, "use_logfire") - ) - - with ui.column().classes("w-full gap-2"): - ui.label("Object Storage").classes("text-lg font-bold") - self.use_elasticsearch = ( - ui.checkbox("S3") - .classes("w-full") - .tooltip("Coming soon!") - .set_enabled(False) - ) - - with ui.column().classes("w-full gap-2"): - self.loading_spinner = ui.spinner(size="lg").classes( - "hidden mt-4 self-center", - ) - self.create_button = ui.button( - "Generate", - icon="rocket", - on_click=self._create_project, - ).classes("w-full py-3 text-lg font-bold mt-4") - - def _bind_state_to_ui(self) -> None: - """Bind UI elements to state variables""" - self.project_name.bind_value_to(state, "project_name") - self.use_postgres.bind_value_to(state, "use_postgres") - self.use_alembic.bind_value_to(state, "use_alembic") - self.use_builtin_auth.bind_value_to(state, "use_builtin_auth") - self.use_rabbitmq.bind_value_to(state, "use_rabbitmq").on( - "change", self._update_taskiq_state - ) - self.use_redis.bind_value_to(state, "use_redis").on( - "change", self._update_taskiq_state - ) - self.use_taskiq.bind_value_to(state, "use_taskiq") - self.use_prometheus.bind_value_to(state, "use_prometheus") - self.use_logfire.bind_value_to(state, "use_logfire") - - def _update_taskiq_state(self, *_) -> None: - """Enable or disable Taskiq based on Redis and RabbitMQ.""" - self.use_taskiq.set_enabled(self.use_redis.value and self.use_rabbitmq.value) - if ( - not (self.use_redis.value and self.use_rabbitmq.value) - and self.use_taskiq.value - ): - self.use_taskiq.value = False - state.use_taskiq = False - - async def _auth_dialog(self) -> bool: - dialog = ui.dialog() - with dialog, ui.card().classes("w-full max-w-md p-6 text-center"): - ui.icon("security", color="green-500").classes("text-4xl self-center") - ui.markdown( - "JWT Auth needs a model with 'email' and 'password' fields. " - "Select any model as auth model later, or create one now (optional)." - ).classes("text-center") - - create_model_checkbox = ui.checkbox( - "Create default 'auth_user' model", value=True - ).classes("w-full mt-4") - - with ui.row().classes("w-full justify-center gap-4 mt-4"): - ui.button("Close", color="negative", on_click=dialog.close) - ui.button( - "Proceed", - color="primary", - on_click=lambda: dialog.submit(create_model_checkbox.value), - ) - - return await dialog - - async def _handle_builtin_auth_change( - self, event: ValueChangeEventArguments - ) -> None: - """Handle JWT Auth checkbox changes""" - enabled = event.value - state.use_builtin_auth = enabled - - if not enabled: - auth_model = state.get_auth_model() - if not auth_model: - return - auth_model.metadata.is_auth_model = False - if state.render_content_fn: - state.render_content_fn.refresh() - if state.render_actions_fn: - state.render_actions_fn.refresh() - return - - proceed = await self._auth_dialog() - - if not proceed: - return - - if any(model.name == "auth_user" for model in state.models): - ui.notify("The 'auth_user' model already exists.", type="negative") - self.use_builtin_auth.value = False - state.use_builtin_auth = False - return - - try: - auth_role_enum_name = DEFAULT_AUTH_USER_ROLE_ENUM_NAME - auth_enum = state.get_enum_by_name(auth_role_enum_name) - - auth_enum_values = [ - CustomEnumValue(name="USER", value="auto()"), - CustomEnumValue(name="ADMIN", value="auto()"), - ] - if auth_enum and not auth_enum.values: - auth_enum.values = auth_enum_values - - if not auth_enum: - auth_enum = CustomEnum( - name=auth_role_enum_name, - values=auth_enum_values, - ) - state.custom_enums.append(auth_enum) - - auth_user_model = Model( - name="auth_user", - metadata=ModelMetadata(is_auth_model=True), - fields=[ - ModelField( - name="id", - type=FieldDataTypeEnum.UUID, - primary_key=True, - unique=True, - index=True, - ), - *DEFAULT_AUTH_USER_FIELDS, - ModelField( - name="role", - type=FieldDataTypeEnum.ENUM, - type_enum=auth_role_enum_name, - default_value=auth_enum.values[0].name, - ), - ModelField( - name="created_at", - type=FieldDataTypeEnum.DATETIME, - default_value="datetime.now(timezone.utc)", - metadata=ModelFieldMetadata(is_created_at_timestamp=True), - ), - ModelField( - name="updated_at", - type=FieldDataTypeEnum.DATETIME, - default_value="datetime.now(timezone.utc)", - extra_kwargs={"onupdate": "datetime.now(timezone.utc)"}, - metadata=ModelFieldMetadata(is_updated_at_timestamp=True), - ), - ], - ) - state.models.append(auth_user_model) - if state.render_content_fn: - state.render_content_fn.refresh() - ui.notify("The 'auth_user' model has been created.", type="positive") - except ValidationError as exc: - notify_validation_error(exc) - - async def _warn_overwrite(self) -> bool: - """Show a confirmation dialog if the project already exists.""" - dialog = ui.dialog() - with dialog, ui.card().classes("w-full max-w-md p-6 text-center"): - ui.icon("warning", color="orange-500").classes("text-4xl self-center") - ui.markdown( - f"Project '{state.project_name}' already exists!\n\n" - "This will **permanently overwrite** the existing project directory.\n" - "Are you sure you want to continue?" - ).classes("text-center") - - with ui.row().classes("w-full justify-center gap-4 mt-4"): - ui.button("Cancel", color="primary", on_click=dialog.close) - ui.button( - "Overwrite", color="negative", on_click=lambda: dialog.submit(True) - ) - - return await dialog - - async def _create_project(self) -> None: - """Generate the project based on the current state.""" - if not state.project_name: - ui.notify("Missing project name!", type="negative") - return - - if not state.models: - ui.notify("No models to generate!", type="negative") - return - - project_path = Path(state.project_name) - - if project_path.exists(): - try: - overwrite = await self._warn_overwrite() - if not overwrite: - ui.notify("Project generation cancelled.", type="warning") - return - except Exception as e: - ui.notify(f"Error displaying confirmation: {e}", type="negative") - return - - self.create_button.classes("hidden") - self.loading_spinner.classes(remove="hidden") - ongoing_notification = ui.notification("Generating project...") - - try: - state.project_name = self.project_name.value - state.use_postgres = self.use_postgres.value - state.use_alembic = self.use_alembic.value - state.use_builtin_auth = self.use_builtin_auth.value - state.use_redis = self.use_redis.value - state.use_rabbitmq = self.use_rabbitmq.value - state.use_taskiq = self.use_taskiq.value - state.use_prometheus = self.use_prometheus.value - state.use_logfire = self.use_logfire.value - - project_spec = state.get_project_spec() - await build_fastapi_project(project_spec) - - ui.notify( - "Project successfully generated at: " - f"{Path.cwd() / project_spec.project_name}", - type="positive", - ) - - except ValidationError as exc: - notify_validation_error(exc) - except Exception as exc: - ui.notify(f"Error creating Project: {exc}", type="negative") - finally: - self.create_button.classes(remove="hidden") - self.loading_spinner.classes("hidden") - ongoing_notification.dismiss() diff --git a/fastapi_forge/frontend/state.py b/fastapi_forge/frontend/state.py deleted file mode 100644 index 8d04815..0000000 --- a/fastapi_forge/frontend/state.py +++ /dev/null @@ -1,289 +0,0 @@ -from collections.abc import Callable - -from pydantic import BaseModel, ValidationError - -from fastapi_forge.enums import FieldDataTypeEnum -from fastapi_forge.frontend.notifications import ( - notify_enum_exists, - notify_model_exists, - notify_something_went_wrong, - notify_validation_error, -) -from fastapi_forge.render import create_jinja_render_manager -from fastapi_forge.render.manager import RenderManager -from fastapi_forge.schemas import ( - CustomEnum, - CustomEnumValue, - Model, - ModelField, - ModelRelationship, - ProjectSpec, -) -from fastapi_forge.type_info_registry import enum_registry - - -class ProjectState(BaseModel): - """Central state management for the project configuration.""" - - models: list[Model] = [] - selected_model: Model | None = None - selected_field: ModelField | None = None - selected_relation: ModelRelationship | None = None - - custom_enums: list[CustomEnum] = [] - selected_enum: CustomEnum | None = None - selected_enum_value: CustomEnumValue | None = None - select_enum_fn: Callable[[CustomEnum], None] | None = None - deselect_enum_fn: Callable | None = None - - render_model_editor_fn: Callable | None = None - render_actions_fn: Callable | None = None - select_model_fn: Callable[[Model], None] | None = None - deselect_model_fn: Callable | None = None - - render_content_fn: Callable | None = None - display_item_editor_fn: Callable | None = None - - show_models: bool = True - show_enums: bool = False - - project_name: str = "" - use_postgres: bool = False - use_alembic: bool = False - use_builtin_auth: bool = False - use_redis: bool = False - use_rabbitmq: bool = False - use_taskiq: bool = False - use_prometheus: bool = False - use_logfire: bool = False - - def get_render_manager(self) -> RenderManager: - """Get the render manager for the current project.""" - return create_jinja_render_manager(project_name=self.project_name) - - def switch_item_editor( - self, - show_models: bool = False, - show_enums: bool = False, - ) -> None: - if sum([show_models, show_enums]) != 1: - msg = "One flag has to be True." - raise ValueError(msg) - - self.show_models = show_models - self.show_enums = show_enums - - if self.render_content_fn: - self.render_content_fn.refresh() - - self._deselect_content() - self.display_item_editor_fn.refresh() - - def initialize_from_project(self, project: ProjectSpec) -> None: - """Initialize state from an existing project specification.""" - self.project_name = project.project_name - self.use_postgres = project.use_postgres - self.use_alembic = project.use_alembic - self.use_builtin_auth = project.use_builtin_auth - self.use_redis = project.use_redis - self.use_rabbitmq = project.use_rabbitmq - self.use_taskiq = project.use_taskiq - self.use_prometheus = project.use_prometheus - self.use_logfire = project.use_logfire - self.models = project.models.copy() - self.custom_enums = project.custom_enums.copy() - - self._trigger_ui_refresh() - - def add_model(self, model_name: str) -> None: - """Add a new model to the project.""" - if self._model_exists(model_name): - notify_model_exists(model_name) - return - - try: - self.models.append(self._create_default_model(model_name)) - self._trigger_ui_refresh() - except ValidationError as exc: - notify_validation_error(exc) - - def delete_model(self, model: Model) -> None: - """Remove a model from the project.""" - if not self._validate_model_operation(model): - return - - self.models.remove(model) - self._cleanup_relationships_for_deleted_model(model.name) - self._deselect_content() - self._trigger_ui_refresh() - - def update_model_name(self, model: Model, new_name: str) -> None: - """Rename an existing model.""" - if model.name == new_name: - return - - if self._model_exists(new_name, exclude=model): - notify_model_exists(new_name) - return - - old_name = model.name - model.name = new_name - self._update_relationships_for_rename(old_name, new_name) - - if model == self.selected_model and self.select_model_fn: - self.select_model_fn(model) - - self._trigger_ui_refresh() - - def select_model(self, model: Model) -> None: - """Set the currently selected model.""" - if self.selected_model == model: - return - - self.selected_model = model - self.select_model_fn(model) # type: ignore - self._trigger_ui_refresh() - - def _enum_exists(self, name: str, exclude: CustomEnum | None = None) -> bool: - return any( - enum.name.lower() == name.lower() - for enum in self.custom_enums - if enum != exclude - ) - - def add_enum(self, enum_name: str) -> None: - if self._enum_exists(enum_name): - notify_enum_exists(enum_name) - return - - try: - self.custom_enums.append(CustomEnum(name=enum_name)) - self._trigger_ui_refresh() - except ValidationError as exc: - notify_validation_error(exc) - - def select_enum(self, enum: CustomEnum) -> None: - if self.selected_enum == enum: - return - - self.selected_enum = enum - self.select_enum_fn(enum) # type: ignore - self._trigger_ui_refresh() - - def delete_enum(self, enum: CustomEnum) -> None: - """Remove an enum from the project.""" - self.custom_enums.remove(enum) - enum_registry.remove(enum.name) - self._deselect_content() - self._trigger_ui_refresh() - - def update_enum_name(self, enum: CustomEnum, new_name: str) -> None: - """Rename an existing enum.""" - if enum.name == new_name: - return - - if self._enum_exists(new_name, exclude=enum): - notify_enum_exists(new_name) - return - - enum_registry.update_key(enum.name, new_name) - enum.name = new_name - - if enum == self.selected_enum and self.select_enum_fn: - self.select_enum_fn(enum) - - self._trigger_ui_refresh() - - def get_project_spec(self) -> ProjectSpec: - """Generate a ProjectSpec from the current state.""" - return ProjectSpec( - project_name=self.project_name, - use_postgres=self.use_postgres, - use_alembic=self.use_alembic, - use_builtin_auth=self.use_builtin_auth, - use_redis=self.use_redis, - use_rabbitmq=self.use_rabbitmq, - use_taskiq=self.use_taskiq, - use_prometheus=self.use_prometheus, - use_logfire=self.use_logfire, - models=self.models, - custom_enums=self.custom_enums, - ) - - def _create_default_model(self, name: str) -> Model: - """Create a new model with default fields.""" - return Model( - name=name, - fields=[ - ModelField( - name="id", - type=FieldDataTypeEnum.UUID, - primary_key=True, - nullable=False, - unique=True, - index=True, - ) - ], - ) - - def _cleanup_relationships_for_deleted_model(self, deleted_model_name: str) -> None: - """Remove relationships pointing to deleted models.""" - for model in self.models: - model.relationships = [ - rel - for rel in model.relationships - if rel.target_model != deleted_model_name - ] - - def _update_relationships_for_rename(self, old_name: str, new_name: str) -> None: - """Update relationships when a model is renamed.""" - for model in self.models: - for relationship in model.relationships: - if relationship.target_model == old_name: - relationship.target_model = new_name - - def _model_exists(self, name: str, exclude: Model | None = None) -> bool: - """Check if a model with the given name already exists.""" - return any(model.name == name for model in self.models if model != exclude) - - def _validate_model_operation(self, model: Model) -> bool: - """Validate conditions for model operations.""" - if model not in self.models or not all( - [self.deselect_model_fn, self.render_content_fn] - ): - notify_something_went_wrong() - return False - return True - - def _deselect_content(self) -> None: - if self.deselect_model_fn: - self.deselect_model_fn() - if self.deselect_enum_fn: - self.deselect_enum_fn() - - self.selected_model = None - self.selected_enum = None - - def _trigger_ui_refresh(self) -> None: - """Refresh all relevant UI components.""" - if self.render_content_fn: - self.render_content_fn.refresh() - if self.render_model_editor_fn: - self.render_model_editor_fn() - if self.render_actions_fn: - self.render_actions_fn.refresh() - - def get_auth_model(self) -> Model | None: - return next( - (model for model in self.models if model.metadata.is_auth_model), - None, - ) - - def get_enum_by_name(self, name: str) -> CustomEnum | None: - return next( - (enum for enum in self.custom_enums if enum.name == name), - None, - ) - - -state: ProjectState = ProjectState() diff --git a/fastapi_forge/frontend/validation.py b/fastapi_forge/frontend/validation.py deleted file mode 100644 index e618241..0000000 --- a/fastapi_forge/frontend/validation.py +++ /dev/null @@ -1,5 +0,0 @@ -def raise_if_missing_fields(required: list[tuple[str, str | None]]): - missing_required = [field_name for field_name, kwarg in required if not kwarg] - if missing_required: - msg = f"Missing fields: {', '.join(missing_required)}." - raise ValueError(msg) diff --git a/fastapi_forge/static/assets/index-Bjr8eh6W.js b/fastapi_forge/static/assets/index-Bjr8eh6W.js new file mode 100644 index 0000000..952e5ce --- /dev/null +++ b/fastapi_forge/static/assets/index-Bjr8eh6W.js @@ -0,0 +1,57 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))o(i);new MutationObserver(i=>{for(const s of i)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&o(r)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function o(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();/** +* @vue/shared v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Pr(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Pe={},Qn=[],Lt=()=>{},Kd=()=>!1,Qi=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ar=e=>e.startsWith("onUpdate:"),je=Object.assign,Dr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Xd=Object.prototype.hasOwnProperty,$e=(e,t)=>Xd.call(e,t),ce=Array.isArray,eo=e=>ti(e)==="[object Map]",po=e=>ti(e)==="[object Set]",hl=e=>ti(e)==="[object Date]",ve=e=>typeof e=="function",Le=e=>typeof e=="string",Nt=e=>typeof e=="symbol",ke=e=>e!==null&&typeof e=="object",Za=e=>(ke(e)||ve(e))&&ve(e.then)&&ve(e.catch),qa=Object.prototype.toString,ti=e=>qa.call(e),Wd=e=>ti(e).slice(8,-1),Ja=e=>ti(e)==="[object Object]",Or=e=>Le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,No=Pr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),es=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zd=/-(\w)/g,yt=es(e=>e.replace(Zd,(t,n)=>n?n.toUpperCase():"")),qd=/\B([A-Z])/g,Tn=es(e=>e.replace(qd,"-$1").toLowerCase()),ts=es(e=>e.charAt(0).toUpperCase()+e.slice(1)),wi=es(e=>e?`on${ts(e)}`:""),rn=(e,t)=>!Object.is(e,t),xi=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:n})},Ai=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jd=e=>{const t=Le(e)?Number(e):NaN;return isNaN(t)?e:t};let pl;const ns=()=>pl||(pl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function at(e){if(ce(e)){const t={};for(let n=0;n{if(n){const o=n.split(ef);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function ze(e){let t="";if(Le(e))t=e;else if(ce(e))for(let n=0;nni(n,t))}const eu=e=>!!(e&&e.__v_isRef===!0),Ae=e=>Le(e)?e:e==null?"":ce(e)||ke(e)&&(e.toString===qa||!ve(e.toString))?eu(e)?Ae(e.value):JSON.stringify(e,tu,2):String(e),tu=(e,t)=>eu(t)?tu(e,t.value):eo(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[o,i],s)=>(n[Is(o,s)+" =>"]=i,n),{})}:po(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Is(n))}:Nt(t)?Is(t):ke(t)&&!ce(t)&&!Ja(t)?String(t):t,Is=(e,t="")=>{var n;return Nt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Je;class nu{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Je,!t&&Je&&(this.index=(Je.scopes||(Je.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Je=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,o;for(n=0,o=this.effects.length;n0)return;if($o){let t=$o;for($o=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Mo;){let t=Mo;for(Mo=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=n}}if(e)throw e}function ru(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function lu(e){let t,n=e.depsTail,o=n;for(;o;){const i=o.prevDep;o.version===-1?(o===n&&(n=i),Lr(o),lf(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=i}e.deps=t,e.depsTail=n}function er(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(au(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function au(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Lo)||(e.globalVersion=Lo,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!er(e))))return;e.flags|=2;const t=e.dep,n=De,o=St;De=e,St=!0;try{ru(e);const i=e.fn(e._value);(t.version===0||rn(i,e._value))&&(e.flags|=128,e._value=i,t.version++)}catch(i){throw t.version++,i}finally{De=n,St=o,lu(e),e.flags&=-3}}function Lr(e,t=!1){const{dep:n,prevSub:o,nextSub:i}=e;if(o&&(o.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=o,e.nextSub=void 0),n.subs===e&&(n.subs=o,!o&&n.computed)){n.computed.flags&=-5;for(let s=n.computed.deps;s;s=s.nextDep)Lr(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function lf(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let St=!0;const uu=[];function dn(){uu.push(St),St=!1}function fn(){const e=uu.pop();St=e===void 0?!0:e}function gl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=De;De=void 0;try{t()}finally{De=n}}}let Lo=0;class af{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ss{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!De||!St||De===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==De)n=this.activeLink=new af(De,this),De.deps?(n.prevDep=De.depsTail,De.depsTail.nextDep=n,De.depsTail=n):De.deps=De.depsTail=n,cu(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const o=n.nextDep;o.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=o),n.prevDep=De.depsTail,n.nextDep=void 0,De.depsTail.nextDep=n,De.depsTail=n,De.deps===n&&(De.deps=o)}return n}trigger(t){this.version++,Lo++,this.notify(t)}notify(t){Vr();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Br()}}}function cu(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)cu(o)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Di=new WeakMap,Vn=Symbol(""),tr=Symbol(""),Fo=Symbol("");function Qe(e,t,n){if(St&&De){let o=Di.get(e);o||Di.set(e,o=new Map);let i=o.get(n);i||(o.set(n,i=new ss),i.map=o,i.key=n),i.track()}}function en(e,t,n,o,i,s){const r=Di.get(e);if(!r){Lo++;return}const l=a=>{a&&a.trigger()};if(Vr(),t==="clear")r.forEach(l);else{const a=ce(e),u=a&&Or(n);if(a&&n==="length"){const c=Number(o);r.forEach((d,p)=>{(p==="length"||p===Fo||!Nt(p)&&p>=c)&&l(d)})}else switch((n!==void 0||r.has(void 0))&&l(r.get(n)),u&&l(r.get(Fo)),t){case"add":a?u&&l(r.get("length")):(l(r.get(Vn)),eo(e)&&l(r.get(tr)));break;case"delete":a||(l(r.get(Vn)),eo(e)&&l(r.get(tr)));break;case"set":eo(e)&&l(r.get(Vn));break}}Br()}function uf(e,t){const n=Di.get(e);return n&&n.get(t)}function Kn(e){const t=Se(e);return t===e?t:(Qe(t,"iterate",Fo),vt(e)?t:t.map(We))}function rs(e){return Qe(e=Se(e),"iterate",Fo),e}const cf={__proto__:null,[Symbol.iterator](){return Ps(this,Symbol.iterator,We)},concat(...e){return Kn(this).concat(...e.map(t=>ce(t)?Kn(t):t))},entries(){return Ps(this,"entries",e=>(e[1]=We(e[1]),e))},every(e,t){return qt(this,"every",e,t,void 0,arguments)},filter(e,t){return qt(this,"filter",e,t,n=>n.map(We),arguments)},find(e,t){return qt(this,"find",e,t,We,arguments)},findIndex(e,t){return qt(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return qt(this,"findLast",e,t,We,arguments)},findLastIndex(e,t){return qt(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return qt(this,"forEach",e,t,void 0,arguments)},includes(...e){return As(this,"includes",e)},indexOf(...e){return As(this,"indexOf",e)},join(e){return Kn(this).join(e)},lastIndexOf(...e){return As(this,"lastIndexOf",e)},map(e,t){return qt(this,"map",e,t,void 0,arguments)},pop(){return yo(this,"pop")},push(...e){return yo(this,"push",e)},reduce(e,...t){return vl(this,"reduce",e,t)},reduceRight(e,...t){return vl(this,"reduceRight",e,t)},shift(){return yo(this,"shift")},some(e,t){return qt(this,"some",e,t,void 0,arguments)},splice(...e){return yo(this,"splice",e)},toReversed(){return Kn(this).toReversed()},toSorted(e){return Kn(this).toSorted(e)},toSpliced(...e){return Kn(this).toSpliced(...e)},unshift(...e){return yo(this,"unshift",e)},values(){return Ps(this,"values",We)}};function Ps(e,t,n){const o=rs(e),i=o[t]();return o!==e&&!vt(e)&&(i._next=i.next,i.next=()=>{const s=i._next();return s.value&&(s.value=n(s.value)),s}),i}const df=Array.prototype;function qt(e,t,n,o,i,s){const r=rs(e),l=r!==e&&!vt(e),a=r[t];if(a!==df[t]){const d=a.apply(e,s);return l?We(d):d}let u=n;r!==e&&(l?u=function(d,p){return n.call(this,We(d),p,e)}:n.length>2&&(u=function(d,p){return n.call(this,d,p,e)}));const c=a.call(r,u,o);return l&&i?i(c):c}function vl(e,t,n,o){const i=rs(e);let s=n;return i!==e&&(vt(e)?n.length>3&&(s=function(r,l,a){return n.call(this,r,l,a,e)}):s=function(r,l,a){return n.call(this,r,We(l),a,e)}),i[t](s,...o)}function As(e,t,n){const o=Se(e);Qe(o,"iterate",Fo);const i=o[t](...n);return(i===-1||i===!1)&&Ur(n[0])?(n[0]=Se(n[0]),o[t](...n)):i}function yo(e,t,n=[]){dn(),Vr();const o=Se(e)[t].apply(e,n);return Br(),fn(),o}const ff=Pr("__proto__,__v_isRef,__isVue"),du=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Nt));function hf(e){Nt(e)||(e=String(e));const t=Se(this);return Qe(t,"has",e),t.hasOwnProperty(e)}class fu{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,o){if(n==="__v_skip")return t.__v_skip;const i=this._isReadonly,s=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return s;if(n==="__v_raw")return o===(i?s?Ef:vu:s?gu:pu).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const r=ce(t);if(!i){let a;if(r&&(a=cf[n]))return a;if(n==="hasOwnProperty")return hf}const l=Reflect.get(t,n,Oe(t)?t:o);return(Nt(n)?du.has(n):ff(n))||(i||Qe(t,"get",n),s)?l:Oe(l)?r&&Or(n)?l:l.value:ke(l)?i?zr(l):go(l):l}}class hu extends fu{constructor(t=!1){super(!1,t)}set(t,n,o,i){let s=t[n];if(!this._isShallow){const a=Sn(s);if(!vt(o)&&!Sn(o)&&(s=Se(s),o=Se(o)),!ce(t)&&Oe(s)&&!Oe(o))return a?!1:(s.value=o,!0)}const r=ce(t)&&Or(n)?Number(n)e,ai=e=>Reflect.getPrototypeOf(e);function yf(e,t,n){return function(...o){const i=this.__v_raw,s=Se(i),r=eo(s),l=e==="entries"||e===Symbol.iterator&&r,a=e==="keys"&&r,u=i[e](...o),c=n?nr:t?Oi:We;return!t&&Qe(s,"iterate",a?tr:Vn),{next(){const{value:d,done:p}=u.next();return p?{value:d,done:p}:{value:l?[c(d[0]),c(d[1])]:c(d),done:p}},[Symbol.iterator](){return this}}}}function ui(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function _f(e,t){const n={get(i){const s=this.__v_raw,r=Se(s),l=Se(i);e||(rn(i,l)&&Qe(r,"get",i),Qe(r,"get",l));const{has:a}=ai(r),u=t?nr:e?Oi:We;if(a.call(r,i))return u(s.get(i));if(a.call(r,l))return u(s.get(l));s!==r&&s.get(i)},get size(){const i=this.__v_raw;return!e&&Qe(Se(i),"iterate",Vn),Reflect.get(i,"size",i)},has(i){const s=this.__v_raw,r=Se(s),l=Se(i);return e||(rn(i,l)&&Qe(r,"has",i),Qe(r,"has",l)),i===l?s.has(i):s.has(i)||s.has(l)},forEach(i,s){const r=this,l=r.__v_raw,a=Se(l),u=t?nr:e?Oi:We;return!e&&Qe(a,"iterate",Vn),l.forEach((c,d)=>i.call(s,u(c),u(d),r))}};return je(n,e?{add:ui("add"),set:ui("set"),delete:ui("delete"),clear:ui("clear")}:{add(i){!t&&!vt(i)&&!Sn(i)&&(i=Se(i));const s=Se(this);return ai(s).has.call(s,i)||(s.add(i),en(s,"add",i,i)),this},set(i,s){!t&&!vt(s)&&!Sn(s)&&(s=Se(s));const r=Se(this),{has:l,get:a}=ai(r);let u=l.call(r,i);u||(i=Se(i),u=l.call(r,i));const c=a.call(r,i);return r.set(i,s),u?rn(s,c)&&en(r,"set",i,s):en(r,"add",i,s),this},delete(i){const s=Se(this),{has:r,get:l}=ai(s);let a=r.call(s,i);a||(i=Se(i),a=r.call(s,i)),l&&l.call(s,i);const u=s.delete(i);return a&&en(s,"delete",i,void 0),u},clear(){const i=Se(this),s=i.size!==0,r=i.clear();return s&&en(i,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(i=>{n[i]=yf(i,e,t)}),n}function Fr(e,t){const n=_f(e,t);return(o,i,s)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?o:Reflect.get($e(n,i)&&i in o?n:o,i,s)}const bf={get:Fr(!1,!1)},wf={get:Fr(!1,!0)},xf={get:Fr(!0,!1)};const pu=new WeakMap,gu=new WeakMap,vu=new WeakMap,Ef=new WeakMap;function Sf(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Cf(e){return e.__v_skip||!Object.isExtensible(e)?0:Sf(Wd(e))}function go(e){return Sn(e)?e:Hr(e,!1,gf,bf,pu)}function Nf(e){return Hr(e,!1,mf,wf,gu)}function zr(e){return Hr(e,!0,vf,xf,vu)}function Hr(e,t,n,o,i){if(!ke(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=Cf(e);if(s===0)return e;const r=i.get(e);if(r)return r;const l=new Proxy(e,s===2?o:n);return i.set(e,l),l}function ln(e){return Sn(e)?ln(e.__v_raw):!!(e&&e.__v_isReactive)}function Sn(e){return!!(e&&e.__v_isReadonly)}function vt(e){return!!(e&&e.__v_isShallow)}function Ur(e){return e?!!e.__v_raw:!1}function Se(e){const t=e&&e.__v_raw;return t?Se(t):e}function an(e){return!$e(e,"__v_skip")&&Object.isExtensible(e)&&Qs(e,"__v_skip",!0),e}const We=e=>ke(e)?go(e):e,Oi=e=>ke(e)?zr(e):e;function Oe(e){return e?e.__v_isRef===!0:!1}function te(e){return mu(e,!1)}function zo(e){return mu(e,!0)}function mu(e,t){return Oe(e)?e:new Tf(e,t)}class Tf{constructor(t,n){this.dep=new ss,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Se(t),this._value=n?t:We(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,o=this.__v_isShallow||vt(t)||Sn(t);t=o?t:Se(t),rn(t,n)&&(this._rawValue=t,this._value=o?t:We(t),this.dep.trigger())}}function oe(e){return Oe(e)?e.value:e}function Ee(e){return ve(e)?e():oe(e)}const Mf={get:(e,t,n)=>t==="__v_raw"?e:oe(Reflect.get(e,t,n)),set:(e,t,n,o)=>{const i=e[t];return Oe(i)&&!Oe(n)?(i.value=n,!0):Reflect.set(e,t,n,o)}};function yu(e){return ln(e)?e:new Proxy(e,Mf)}class $f{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new ss,{get:o,set:i}=t(n.track.bind(n),n.trigger.bind(n));this._get=o,this._set=i}get value(){return this._value=this._get()}set value(t){this._set(t)}}function If(e){return new $f(e)}function _u(e){const t=ce(e)?new Array(e.length):{};for(const n in e)t[n]=bu(e,n);return t}class kf{constructor(t,n,o){this._object=t,this._key=n,this._defaultValue=o,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return uf(Se(this._object),this._key)}}class Pf{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Ve(e,t,n){return Oe(e)?e:ve(e)?new Pf(e):ke(e)&&arguments.length>1?bu(e,t,n):te(e)}function bu(e,t,n){const o=e[t];return Oe(o)?o:new kf(e,t,n)}class Af{constructor(t,n,o){this.fn=t,this.setter=n,this._value=void 0,this.dep=new ss(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Lo-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&De!==this)return su(this,!0),!0}get value(){const t=this.dep.track();return au(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Df(e,t,n=!1){let o,i;return ve(e)?o=e:(o=e.get,i=e.set),new Af(o,i,n)}const ci={},Ri=new WeakMap;let Pn;function Of(e,t=!1,n=Pn){if(n){let o=Ri.get(n);o||Ri.set(n,o=[]),o.push(e)}}function Rf(e,t,n=Pe){const{immediate:o,deep:i,once:s,scheduler:r,augmentJob:l,call:a}=n,u=_=>i?_:vt(_)||i===!1||i===0?tn(_,1):tn(_);let c,d,p,h,b=!1,E=!1;if(Oe(e)?(d=()=>e.value,b=vt(e)):ln(e)?(d=()=>u(e),b=!0):ce(e)?(E=!0,b=e.some(_=>ln(_)||vt(_)),d=()=>e.map(_=>{if(Oe(_))return _.value;if(ln(_))return u(_);if(ve(_))return a?a(_,2):_()})):ve(e)?t?d=a?()=>a(e,2):e:d=()=>{if(p){dn();try{p()}finally{fn()}}const _=Pn;Pn=c;try{return a?a(e,3,[h]):e(h)}finally{Pn=_}}:d=Lt,t&&i){const _=d,O=i===!0?1/0:i;d=()=>tn(_(),O)}const N=is(),M=()=>{c.stop(),N&&N.active&&Dr(N.effects,c)};if(s&&t){const _=t;t=(...O)=>{_(...O),M()}}let P=E?new Array(e.length).fill(ci):ci;const g=_=>{if(!(!(c.flags&1)||!c.dirty&&!_))if(t){const O=c.run();if(i||b||(E?O.some((U,X)=>rn(U,P[X])):rn(O,P))){p&&p();const U=Pn;Pn=c;try{const X=[O,P===ci?void 0:E&&P[0]===ci?[]:P,h];P=O,a?a(t,3,X):t(...X)}finally{Pn=U}}}else c.run()};return l&&l(g),c=new ou(d),c.scheduler=r?()=>r(g,!1):g,h=_=>Of(_,!1,c),p=c.onStop=()=>{const _=Ri.get(c);if(_){if(a)a(_,4);else for(const O of _)O();Ri.delete(c)}},t?o?g(!0):P=c.run():r?r(g.bind(null,!0),!0):c.run(),M.pause=c.pause.bind(c),M.resume=c.resume.bind(c),M.stop=M,M}function tn(e,t=1/0,n){if(t<=0||!ke(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,Oe(e))tn(e.value,t,n);else if(ce(e))for(let o=0;o{tn(o,t,n)});else if(Ja(e)){for(const o in e)tn(e[o],t,n);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&tn(e[o],t,n)}return e}/** +* @vue/runtime-core v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function oi(e,t,n,o){try{return o?e(...o):e()}catch(i){ls(i,t,n)}}function Tt(e,t,n,o){if(ve(e)){const i=oi(e,t,n,o);return i&&Za(i)&&i.catch(s=>{ls(s,t,n)}),i}if(ce(e)){const i=[];for(let s=0;s>>1,i=it[o],s=Ho(i);s=Ho(n)?it.push(e):it.splice(Bf(t),0,e),e.flags|=1,xu()}}function xu(){Vi||(Vi=wu.then(Su))}function Lf(e){ce(e)?to.push(...e):bn&&e.id===-1?bn.splice(qn+1,0,e):e.flags&1||(to.push(e),e.flags|=1),xu()}function ml(e,t,n=Dt+1){for(;nHo(n)-Ho(o));if(to.length=0,bn){bn.push(...t);return}for(bn=t,qn=0;qne.id==null?e.flags&2?-1:1/0:e.id;function Su(e){try{for(Dt=0;Dt{o._d&&Il(-1);const s=Bi(t);let r;try{r=e(...i)}finally{Bi(s),o._d&&Il(1)}return r};return o._n=!0,o._c=!0,o._d=!0,o}function ye(e,t){if(Ze===null)return e;const n=fs(Ze),o=e.dirs||(e.dirs=[]);for(let i=0;ie.__isTeleport,Io=e=>e&&(e.disabled||e.disabled===""),yl=e=>e&&(e.defer||e.defer===""),_l=e=>typeof SVGElement<"u"&&e instanceof SVGElement,bl=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,or=(e,t)=>{const n=e&&e.to;return Le(n)?t?t(n):null:n},Tu={name:"Teleport",__isTeleport:!0,process(e,t,n,o,i,s,r,l,a,u){const{mc:c,pc:d,pbc:p,o:{insert:h,querySelector:b,createText:E,createComment:N}}=u,M=Io(t.props);let{shapeFlag:P,children:g,dynamicChildren:_}=t;if(e==null){const O=t.el=E(""),U=t.anchor=E("");h(O,n,o),h(U,n,o);const X=(F,Z)=>{P&16&&(i&&i.isCE&&(i.ce._teleportTarget=F),c(g,F,Z,i,s,r,l,a))},H=()=>{const F=t.target=or(t.props,b),Z=Mu(F,t,E,h);F&&(r!=="svg"&&_l(F)?r="svg":r!=="mathml"&&bl(F)&&(r="mathml"),M||(X(F,Z),Ei(t,!1)))};M&&(X(n,U),Ei(t,!0)),yl(t.props)?(t.el.__isMounted=!1,ot(()=>{H(),delete t.el.__isMounted},s)):H()}else{if(yl(t.props)&&e.el.__isMounted===!1){ot(()=>{Tu.process(e,t,n,o,i,s,r,l,a,u)},s);return}t.el=e.el,t.targetStart=e.targetStart;const O=t.anchor=e.anchor,U=t.target=e.target,X=t.targetAnchor=e.targetAnchor,H=Io(e.props),F=H?n:U,Z=H?O:X;if(r==="svg"||_l(U)?r="svg":(r==="mathml"||bl(U))&&(r="mathml"),_?(p(e.dynamicChildren,_,F,i,s,r,l),Xr(e,t,!0)):a||d(e,t,F,Z,i,s,r,l,!1),M)H?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):di(t,n,O,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const j=t.target=or(t.props,b);j&&di(t,j,null,u,0)}else H&&di(t,U,X,u,1);Ei(t,M)}},remove(e,t,n,{um:o,o:{remove:i}},s){const{shapeFlag:r,children:l,anchor:a,targetStart:u,targetAnchor:c,target:d,props:p}=e;if(d&&(i(u),i(c)),s&&i(a),r&16){const h=s||!Io(p);for(let b=0;b{e.isMounted=!0}),us(()=>{e.isUnmounting=!0}),e}const gt=[Function,Array],Gf={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:gt,onEnter:gt,onAfterEnter:gt,onEnterCancelled:gt,onBeforeLeave:gt,onLeave:gt,onAfterLeave:gt,onLeaveCancelled:gt,onBeforeAppear:gt,onAppear:gt,onAfterAppear:gt,onAppearCancelled:gt};function jf(e,t){const{leavingVNodes:n}=e;let o=n.get(t.type);return o||(o=Object.create(null),n.set(t.type,o)),o}function ir(e,t,n,o,i){const{appear:s,mode:r,persisted:l=!1,onBeforeEnter:a,onEnter:u,onAfterEnter:c,onEnterCancelled:d,onBeforeLeave:p,onLeave:h,onAfterLeave:b,onLeaveCancelled:E,onBeforeAppear:N,onAppear:M,onAfterAppear:P,onAppearCancelled:g}=t,_=String(e.key),O=jf(n,e),U=(F,Z)=>{F&&Tt(F,o,9,Z)},X=(F,Z)=>{const j=Z[1];U(F,Z),ce(F)?F.every(C=>C.length<=1)&&j():F.length<=1&&j()},H={mode:r,persisted:l,beforeEnter(F){let Z=a;if(!n.isMounted)if(s)Z=N||a;else return;F[Xn]&&F[Xn](!0);const j=O[_];j&&Jn(e,j)&&j.el[Xn]&&j.el[Xn](),U(Z,[F])},enter(F){let Z=u,j=c,C=d;if(!n.isMounted)if(s)Z=M||u,j=P||c,C=g||d;else return;let ee=!1;const T=F[fi]=G=>{ee||(ee=!0,G?U(C,[F]):U(j,[F]),H.delayedLeave&&H.delayedLeave(),F[fi]=void 0)};Z?X(Z,[F,T]):T()},leave(F,Z){const j=String(e.key);if(F[fi]&&F[fi](!0),n.isUnmounting)return Z();U(p,[F]);let C=!1;const ee=F[Xn]=T=>{C||(C=!0,Z(),T?U(E,[F]):U(b,[F]),F[Xn]=void 0,O[j]===e&&delete O[j])};O[j]=e,h?X(h,[F,ee]):ee()},clone(F){return ir(F,t,n,o)}};return H}function Uo(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Uo(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function $u(e,t=!1,n){let o=[],i=0;for(let s=0;s1)for(let s=0;sko(b,t&&(ce(t)?t[E]:t),n,o,i));return}if(no(o)&&!i){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&ko(e,t,n,o.component.subTree);return}const s=o.shapeFlag&4?fs(o.component):o.el,r=i?null:s,{i:l,r:a}=e,u=t&&t.r,c=l.refs===Pe?l.refs={}:l.refs,d=l.setupState,p=Se(d),h=d===Pe?()=>!1:b=>$e(p,b);if(u!=null&&u!==a&&(Le(u)?(c[u]=null,h(u)&&(d[u]=null)):Oe(u)&&(u.value=null)),ve(a))oi(a,l,12,[r,c]);else{const b=Le(a),E=Oe(a);if(b||E){const N=()=>{if(e.f){const M=b?h(a)?d[a]:c[a]:a.value;i?ce(M)&&Dr(M,s):ce(M)?M.includes(s)||M.push(s):b?(c[a]=[s],h(a)&&(d[a]=c[a])):(a.value=[s],e.k&&(c[e.k]=a.value))}else b?(c[a]=r,h(a)&&(d[a]=r)):E&&(a.value=r,e.k&&(c[e.k]=r))};r?(N.id=-1,ot(N,n)):N()}}}ns().requestIdleCallback;ns().cancelIdleCallback;const no=e=>!!e.type.__asyncLoader,ku=e=>e.type.__isKeepAlive;function Yf(e,t){Pu(e,"a",t)}function Kf(e,t){Pu(e,"da",t)}function Pu(e,t,n=et){const o=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(as(t,o,n),n){let i=n.parent;for(;i&&i.parent;)ku(i.parent.vnode)&&Xf(o,t,n,i),i=i.parent}}function Xf(e,t,n,o){const i=as(t,e,o,!0);jr(()=>{Dr(o[t],i)},n)}function as(e,t,n=et,o=!1){if(n){const i=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...r)=>{dn();const l=ii(n),a=Tt(t,n,e,r);return l(),fn(),a});return o?i.unshift(s):i.push(s),s}}const pn=e=>(t,n=et)=>{(!jo||e==="sp")&&as(e,(...o)=>t(...o),n)},Au=pn("bm"),ut=pn("m"),Wf=pn("bu"),Du=pn("u"),us=pn("bum"),jr=pn("um"),Zf=pn("sp"),qf=pn("rtg"),Jf=pn("rtc");function Qf(e,t=et){as("ec",e,t)}const Ou="components";function Bn(e,t){return Vu(Ou,e,!0,t)||e}const Ru=Symbol.for("v-ndc");function vo(e){return Le(e)?Vu(Ou,e,!1)||e:e||Ru}function Vu(e,t,n=!0,o=!1){const i=Ze||et;if(i){const s=i.type;{const l=Hh(s,!1);if(l&&(l===t||l===yt(t)||l===ts(yt(t))))return s}const r=wl(i[e]||s[e],t)||wl(i.appContext[e],t);return!r&&o?s:r}}function wl(e,t){return e&&(e[t]||e[yt(t)]||e[ts(yt(t))])}function Ye(e,t,n,o){let i;const s=n&&n[o],r=ce(e);if(r||Le(e)){const l=r&&ln(e);let a=!1,u=!1;l&&(a=!vt(e),u=Sn(e),e=rs(e)),i=new Array(e.length);for(let c=0,d=e.length;ct(l,a,void 0,s&&s[a]));else{const l=Object.keys(e);i=new Array(l.length);for(let a=0,u=l.length;aGo(t)?!(t.type===Gt||t.type===_e&&!Bu(t.children)):!0)?e:null}function eh(e,t){const n={};for(const o in e)n[wi(o)]=e[o];return n}const sr=e=>e?ic(e)?fs(e):sr(e.parent):null,Po=je(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>sr(e.parent),$root:e=>sr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>zu(e),$forceUpdate:e=>e.f||(e.f=()=>{Gr(e.update)}),$nextTick:e=>e.n||(e.n=ht.bind(e.proxy)),$watch:e=>Ch.bind(e)}),Ds=(e,t)=>e!==Pe&&!e.__isScriptSetup&&$e(e,t),th={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:o,data:i,props:s,accessCache:r,type:l,appContext:a}=e;let u;if(t[0]!=="$"){const h=r[t];if(h!==void 0)switch(h){case 1:return o[t];case 2:return i[t];case 4:return n[t];case 3:return s[t]}else{if(Ds(o,t))return r[t]=1,o[t];if(i!==Pe&&$e(i,t))return r[t]=2,i[t];if((u=e.propsOptions[0])&&$e(u,t))return r[t]=3,s[t];if(n!==Pe&&$e(n,t))return r[t]=4,n[t];rr&&(r[t]=0)}}const c=Po[t];let d,p;if(c)return t==="$attrs"&&Qe(e.attrs,"get",""),c(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==Pe&&$e(n,t))return r[t]=4,n[t];if(p=a.config.globalProperties,$e(p,t))return p[t]},set({_:e},t,n){const{data:o,setupState:i,ctx:s}=e;return Ds(i,t)?(i[t]=n,!0):o!==Pe&&$e(o,t)?(o[t]=n,!0):$e(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:o,appContext:i,propsOptions:s}},r){let l;return!!n[r]||e!==Pe&&$e(e,r)||Ds(t,r)||(l=s[0])&&$e(l,r)||$e(o,r)||$e(Po,r)||$e(i.config.globalProperties,r)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:$e(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function nh(){return Lu().slots}function oh(){return Lu().attrs}function Lu(e){const t=Xt();return t.setupContext||(t.setupContext=rc(t))}function xl(e){return ce(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function ih(e,t){const n={};for(const o in e)t.includes(o)||Object.defineProperty(n,o,{enumerable:!0,get:()=>e[o]});return n}let rr=!0;function sh(e){const t=zu(e),n=e.proxy,o=e.ctx;rr=!1,t.beforeCreate&&El(t.beforeCreate,e,"bc");const{data:i,computed:s,methods:r,watch:l,provide:a,inject:u,created:c,beforeMount:d,mounted:p,beforeUpdate:h,updated:b,activated:E,deactivated:N,beforeDestroy:M,beforeUnmount:P,destroyed:g,unmounted:_,render:O,renderTracked:U,renderTriggered:X,errorCaptured:H,serverPrefetch:F,expose:Z,inheritAttrs:j,components:C,directives:ee,filters:T}=t;if(u&&rh(u,o,null),r)for(const L in r){const $=r[L];ve($)&&(o[L]=$.bind(n))}if(i){const L=i.call(n,n);ke(L)&&(e.data=go(L))}if(rr=!0,s)for(const L in s){const $=s[L],D=ve($)?$.bind(n,n):ve($.get)?$.get.bind(n,n):Lt,V=!ve($)&&ve($.set)?$.set.bind(n):Lt,Y=pe({get:D,set:V});Object.defineProperty(o,L,{enumerable:!0,configurable:!0,get:()=>Y.value,set:J=>Y.value=J})}if(l)for(const L in l)Fu(l[L],o,n,L);if(a){const L=ve(a)?a.call(n):a;Reflect.ownKeys(L).forEach($=>{Hn($,L[$])})}c&&El(c,e,"c");function k(L,$){ce($)?$.forEach(D=>L(D.bind(n))):$&&L($.bind(n))}if(k(Au,d),k(ut,p),k(Wf,h),k(Du,b),k(Yf,E),k(Kf,N),k(Qf,H),k(Jf,U),k(qf,X),k(us,P),k(jr,_),k(Zf,F),ce(Z))if(Z.length){const L=e.exposed||(e.exposed={});Z.forEach($=>{Object.defineProperty(L,$,{get:()=>n[$],set:D=>n[$]=D,enumerable:!0})})}else e.exposed||(e.exposed={});O&&e.render===Lt&&(e.render=O),j!=null&&(e.inheritAttrs=j),C&&(e.components=C),ee&&(e.directives=ee),F&&Iu(e)}function rh(e,t,n=Lt){ce(e)&&(e=lr(e));for(const o in e){const i=e[o];let s;ke(i)?"default"in i?s=mt(i.from||o,i.default,!0):s=mt(i.from||o):s=mt(i),Oe(s)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>s.value,set:r=>s.value=r}):t[o]=s}}function El(e,t,n){Tt(ce(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,n)}function Fu(e,t,n,o){let i=o.includes(".")?Qu(n,o):()=>n[o];if(Le(e)){const s=t[e];ve(s)&&xe(i,s)}else if(ve(e))xe(i,e.bind(n));else if(ke(e))if(ce(e))e.forEach(s=>Fu(s,t,n,o));else{const s=ve(e.handler)?e.handler.bind(n):t[e.handler];ve(s)&&xe(i,s,e)}}function zu(e){const t=e.type,{mixins:n,extends:o}=t,{mixins:i,optionsCache:s,config:{optionMergeStrategies:r}}=e.appContext,l=s.get(t);let a;return l?a=l:!i.length&&!n&&!o?a=t:(a={},i.length&&i.forEach(u=>Li(a,u,r,!0)),Li(a,t,r)),ke(t)&&s.set(t,a),a}function Li(e,t,n,o=!1){const{mixins:i,extends:s}=t;s&&Li(e,s,n,!0),i&&i.forEach(r=>Li(e,r,n,!0));for(const r in t)if(!(o&&r==="expose")){const l=lh[r]||n&&n[r];e[r]=l?l(e[r],t[r]):t[r]}return e}const lh={data:Sl,props:Cl,emits:Cl,methods:xo,computed:xo,beforeCreate:nt,created:nt,beforeMount:nt,mounted:nt,beforeUpdate:nt,updated:nt,beforeDestroy:nt,beforeUnmount:nt,destroyed:nt,unmounted:nt,activated:nt,deactivated:nt,errorCaptured:nt,serverPrefetch:nt,components:xo,directives:xo,watch:uh,provide:Sl,inject:ah};function Sl(e,t){return t?e?function(){return je(ve(e)?e.call(this,this):e,ve(t)?t.call(this,this):t)}:t:e}function ah(e,t){return xo(lr(e),lr(t))}function lr(e){if(ce(e)){const t={};for(let n=0;n1)return n&&ve(t)?t.call(o&&o.proxy):t}}function fh(){return!!(Xt()||Ln)}const Uu={},Gu=()=>Object.create(Uu),ju=e=>Object.getPrototypeOf(e)===Uu;function hh(e,t,n,o=!1){const i={},s=Gu();e.propsDefaults=Object.create(null),Yu(e,t,i,s);for(const r in e.propsOptions[0])r in i||(i[r]=void 0);n?e.props=o?i:Nf(i):e.type.props?e.props=i:e.props=s,e.attrs=s}function ph(e,t,n,o){const{props:i,attrs:s,vnode:{patchFlag:r}}=e,l=Se(i),[a]=e.propsOptions;let u=!1;if((o||r>0)&&!(r&16)){if(r&8){const c=e.vnode.dynamicProps;for(let d=0;d{a=!0;const[p,h]=Ku(d,t,!0);je(r,p),h&&l.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}if(!s&&!a)return ke(e)&&o.set(e,Qn),Qn;if(ce(s))for(let c=0;ce==="_"||e==="__"||e==="_ctx"||e==="$stable",Kr=e=>ce(e)?e.map(Rt):[Rt(e)],vh=(e,t,n)=>{if(t._n)return t;const o=Ut((...i)=>Kr(t(...i)),n);return o._c=!1,o},Xu=(e,t,n)=>{const o=e._ctx;for(const i in e){if(Yr(i))continue;const s=e[i];if(ve(s))t[i]=vh(i,s,o);else if(s!=null){const r=Kr(s);t[i]=()=>r}}},Wu=(e,t)=>{const n=Kr(t);e.slots.default=()=>n},Zu=(e,t,n)=>{for(const o in t)(n||!Yr(o))&&(e[o]=t[o])},mh=(e,t,n)=>{const o=e.slots=Gu();if(e.vnode.shapeFlag&32){const i=t.__;i&&Qs(o,"__",i,!0);const s=t._;s?(Zu(o,t,n),n&&Qs(o,"_",s,!0)):Xu(t,o)}else t&&Wu(e,t)},yh=(e,t,n)=>{const{vnode:o,slots:i}=e;let s=!0,r=Pe;if(o.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:Zu(i,t,n):(s=!t.$stable,Xu(t,i)),r=t}else t&&(Wu(e,t),r={default:1});if(s)for(const l in i)!Yr(l)&&r[l]==null&&delete i[l]},ot=Ph;function _h(e){return bh(e)}function bh(e,t){const n=ns();n.__VUE__=!0;const{insert:o,remove:i,patchProp:s,createElement:r,createText:l,createComment:a,setText:u,setElementText:c,parentNode:d,nextSibling:p,setScopeId:h=Lt,insertStaticContent:b}=e,E=(w,S,f,v=null,y=null,m=null,I=void 0,B=null,R=!!S.dynamicChildren)=>{if(w===S)return;w&&!Jn(w,S)&&(v=me(w),J(w,y,m,!0),w=null),S.patchFlag===-2&&(R=!1,S.dynamicChildren=null);const{type:A,ref:q,shapeFlag:K}=S;switch(A){case ds:N(w,S,f,v);break;case Gt:M(w,S,f,v);break;case Si:w==null&&P(S,f,v,I);break;case _e:C(w,S,f,v,y,m,I,B,R);break;default:K&1?O(w,S,f,v,y,m,I,B,R):K&6?ee(w,S,f,v,y,m,I,B,R):(K&64||K&128)&&A.process(w,S,f,v,y,m,I,B,R,we)}q!=null&&y?ko(q,w&&w.ref,m,S||w,!S):q==null&&w&&w.ref!=null&&ko(w.ref,null,m,w,!0)},N=(w,S,f,v)=>{if(w==null)o(S.el=l(S.children),f,v);else{const y=S.el=w.el;S.children!==w.children&&u(y,S.children)}},M=(w,S,f,v)=>{w==null?o(S.el=a(S.children||""),f,v):S.el=w.el},P=(w,S,f,v)=>{[w.el,w.anchor]=b(w.children,S,f,v,w.el,w.anchor)},g=({el:w,anchor:S},f,v)=>{let y;for(;w&&w!==S;)y=p(w),o(w,f,v),w=y;o(S,f,v)},_=({el:w,anchor:S})=>{let f;for(;w&&w!==S;)f=p(w),i(w),w=f;i(S)},O=(w,S,f,v,y,m,I,B,R)=>{S.type==="svg"?I="svg":S.type==="math"&&(I="mathml"),w==null?U(S,f,v,y,m,I,B,R):F(w,S,y,m,I,B,R)},U=(w,S,f,v,y,m,I,B)=>{let R,A;const{props:q,shapeFlag:K,transition:ne,dirs:se}=w;if(R=w.el=r(w.type,m,q&&q.is,q),K&8?c(R,w.children):K&16&&H(w.children,R,null,v,y,Os(w,m),I,B),se&&$n(w,null,v,"created"),X(R,w,w.scopeId,I,v),q){for(const Ce in q)Ce!=="value"&&!No(Ce)&&s(R,Ce,null,q[Ce],m,v);"value"in q&&s(R,"value",null,q.value,m),(A=q.onVnodeBeforeMount)&&Pt(A,v,w)}se&&$n(w,null,v,"beforeMount");const ge=wh(y,ne);ge&&ne.beforeEnter(R),o(R,S,f),((A=q&&q.onVnodeMounted)||ge||se)&&ot(()=>{A&&Pt(A,v,w),ge&&ne.enter(R),se&&$n(w,null,v,"mounted")},y)},X=(w,S,f,v,y)=>{if(f&&h(w,f),v)for(let m=0;m{for(let A=R;A{const B=S.el=w.el;let{patchFlag:R,dynamicChildren:A,dirs:q}=S;R|=w.patchFlag&16;const K=w.props||Pe,ne=S.props||Pe;let se;if(f&&In(f,!1),(se=ne.onVnodeBeforeUpdate)&&Pt(se,f,S,w),q&&$n(S,w,f,"beforeUpdate"),f&&In(f,!0),(K.innerHTML&&ne.innerHTML==null||K.textContent&&ne.textContent==null)&&c(B,""),A?Z(w.dynamicChildren,A,B,f,v,Os(S,y),m):I||$(w,S,B,null,f,v,Os(S,y),m,!1),R>0){if(R&16)j(B,K,ne,f,y);else if(R&2&&K.class!==ne.class&&s(B,"class",null,ne.class,y),R&4&&s(B,"style",K.style,ne.style,y),R&8){const ge=S.dynamicProps;for(let Ce=0;Ce{se&&Pt(se,f,S,w),q&&$n(S,w,f,"updated")},v)},Z=(w,S,f,v,y,m,I)=>{for(let B=0;B{if(S!==f){if(S!==Pe)for(const m in S)!No(m)&&!(m in f)&&s(w,m,S[m],null,y,v);for(const m in f){if(No(m))continue;const I=f[m],B=S[m];I!==B&&m!=="value"&&s(w,m,B,I,y,v)}"value"in f&&s(w,"value",S.value,f.value,y)}},C=(w,S,f,v,y,m,I,B,R)=>{const A=S.el=w?w.el:l(""),q=S.anchor=w?w.anchor:l("");let{patchFlag:K,dynamicChildren:ne,slotScopeIds:se}=S;se&&(B=B?B.concat(se):se),w==null?(o(A,f,v),o(q,f,v),H(S.children||[],f,q,y,m,I,B,R)):K>0&&K&64&&ne&&w.dynamicChildren?(Z(w.dynamicChildren,ne,f,y,m,I,B),(S.key!=null||y&&S===y.subTree)&&Xr(w,S,!0)):$(w,S,f,q,y,m,I,B,R)},ee=(w,S,f,v,y,m,I,B,R)=>{S.slotScopeIds=B,w==null?S.shapeFlag&512?y.ctx.activate(S,f,v,I,R):T(S,f,v,y,m,I,R):G(w,S,R)},T=(w,S,f,v,y,m,I)=>{const B=w.component=Bh(w,v,y);if(ku(w)&&(B.ctx.renderer=we),Lh(B,!1,I),B.asyncDep){if(y&&y.registerDep(B,k,I),!w.el){const R=B.subTree=Me(Gt);M(null,R,S,f),w.placeholder=R.el}}else k(B,w,S,f,y,m,I)},G=(w,S,f)=>{const v=S.component=w.component;if(Ih(w,S,f))if(v.asyncDep&&!v.asyncResolved){L(v,S,f);return}else v.next=S,v.update();else S.el=w.el,v.vnode=S},k=(w,S,f,v,y,m,I)=>{const B=()=>{if(w.isMounted){let{next:K,bu:ne,u:se,parent:ge,vnode:Ce}=w;{const It=qu(w);if(It){K&&(K.el=Ce.el,L(w,K,I)),It.asyncDep.then(()=>{w.isUnmounted||B()});return}}let Te=K,qe;In(w,!1),K?(K.el=Ce.el,L(w,K,I)):K=Ce,ne&&xi(ne),(qe=K.props&&K.props.onVnodeBeforeUpdate)&&Pt(qe,ge,K,Ce),In(w,!0);const rt=Ml(w),$t=w.subTree;w.subTree=rt,E($t,rt,d($t.el),me($t),w,y,m),K.el=rt.el,Te===null&&kh(w,rt.el),se&&ot(se,y),(qe=K.props&&K.props.onVnodeUpdated)&&ot(()=>Pt(qe,ge,K,Ce),y)}else{let K;const{el:ne,props:se}=S,{bm:ge,m:Ce,parent:Te,root:qe,type:rt}=w,$t=no(S);In(w,!1),ge&&xi(ge),!$t&&(K=se&&se.onVnodeBeforeMount)&&Pt(K,Te,S),In(w,!0);{qe.ce&&qe.ce._def.shadowRoot!==!1&&qe.ce._injectChildStyle(rt);const It=w.subTree=Ml(w);E(null,It,f,v,w,y,m),S.el=It.el}if(Ce&&ot(Ce,y),!$t&&(K=se&&se.onVnodeMounted)){const It=S;ot(()=>Pt(K,Te,It),y)}(S.shapeFlag&256||Te&&no(Te.vnode)&&Te.vnode.shapeFlag&256)&&w.a&&ot(w.a,y),w.isMounted=!0,S=f=v=null}};w.scope.on();const R=w.effect=new ou(B);w.scope.off();const A=w.update=R.run.bind(R),q=w.job=R.runIfDirty.bind(R);q.i=w,q.id=w.uid,R.scheduler=()=>Gr(q),In(w,!0),A()},L=(w,S,f)=>{S.component=w;const v=w.vnode.props;w.vnode=S,w.next=null,ph(w,S.props,v,f),yh(w,S.children,f),dn(),ml(w),fn()},$=(w,S,f,v,y,m,I,B,R=!1)=>{const A=w&&w.children,q=w?w.shapeFlag:0,K=S.children,{patchFlag:ne,shapeFlag:se}=S;if(ne>0){if(ne&128){V(A,K,f,v,y,m,I,B,R);return}else if(ne&256){D(A,K,f,v,y,m,I,B,R);return}}se&8?(q&16&&le(A,y,m),K!==A&&c(f,K)):q&16?se&16?V(A,K,f,v,y,m,I,B,R):le(A,y,m,!0):(q&8&&c(f,""),se&16&&H(K,f,v,y,m,I,B,R))},D=(w,S,f,v,y,m,I,B,R)=>{w=w||Qn,S=S||Qn;const A=w.length,q=S.length,K=Math.min(A,q);let ne;for(ne=0;neq?le(w,y,m,!0,!1,K):H(S,f,v,y,m,I,B,R,K)},V=(w,S,f,v,y,m,I,B,R)=>{let A=0;const q=S.length;let K=w.length-1,ne=q-1;for(;A<=K&&A<=ne;){const se=w[A],ge=S[A]=R?wn(S[A]):Rt(S[A]);if(Jn(se,ge))E(se,ge,f,null,y,m,I,B,R);else break;A++}for(;A<=K&&A<=ne;){const se=w[K],ge=S[ne]=R?wn(S[ne]):Rt(S[ne]);if(Jn(se,ge))E(se,ge,f,null,y,m,I,B,R);else break;K--,ne--}if(A>K){if(A<=ne){const se=ne+1,ge=sene)for(;A<=K;)J(w[A],y,m,!0),A++;else{const se=A,ge=A,Ce=new Map;for(A=ge;A<=ne;A++){const ct=S[A]=R?wn(S[A]):Rt(S[A]);ct.key!=null&&Ce.set(ct.key,A)}let Te,qe=0;const rt=ne-ge+1;let $t=!1,It=0;const mo=new Array(rt);for(A=0;A=rt){J(ct,y,m,!0);continue}let kt;if(ct.key!=null)kt=Ce.get(ct.key);else for(Te=ge;Te<=ne;Te++)if(mo[Te-ge]===0&&Jn(ct,S[Te])){kt=Te;break}kt===void 0?J(ct,y,m,!0):(mo[kt-ge]=A+1,kt>=It?It=kt:$t=!0,E(ct,S[kt],f,null,y,m,I,B,R),qe++)}const cl=$t?xh(mo):Qn;for(Te=cl.length-1,A=rt-1;A>=0;A--){const ct=ge+A,kt=S[ct],dl=S[ct+1],fl=ct+1{const{el:m,type:I,transition:B,children:R,shapeFlag:A}=w;if(A&6){Y(w.component.subTree,S,f,v);return}if(A&128){w.suspense.move(S,f,v);return}if(A&64){I.move(w,S,f,we);return}if(I===_e){o(m,S,f);for(let K=0;KB.enter(m),y);else{const{leave:K,delayLeave:ne,afterLeave:se}=B,ge=()=>{w.ctx.isUnmounted?i(m):o(m,S,f)},Ce=()=>{K(m,()=>{ge(),se&&se()})};ne?ne(m,ge,Ce):Ce()}else o(m,S,f)},J=(w,S,f,v=!1,y=!1)=>{const{type:m,props:I,ref:B,children:R,dynamicChildren:A,shapeFlag:q,patchFlag:K,dirs:ne,cacheIndex:se}=w;if(K===-2&&(y=!1),B!=null&&(dn(),ko(B,null,f,w,!0),fn()),se!=null&&(S.renderCache[se]=void 0),q&256){S.ctx.deactivate(w);return}const ge=q&1&&ne,Ce=!no(w);let Te;if(Ce&&(Te=I&&I.onVnodeBeforeUnmount)&&Pt(Te,S,w),q&6)ie(w.component,f,v);else{if(q&128){w.suspense.unmount(f,v);return}ge&&$n(w,null,S,"beforeUnmount"),q&64?w.type.remove(w,S,f,we,v):A&&!A.hasOnce&&(m!==_e||K>0&&K&64)?le(A,S,f,!1,!0):(m===_e&&K&384||!y&&q&16)&&le(R,S,f),v&&ue(w)}(Ce&&(Te=I&&I.onVnodeUnmounted)||ge)&&ot(()=>{Te&&Pt(Te,S,w),ge&&$n(w,null,S,"unmounted")},f)},ue=w=>{const{type:S,el:f,anchor:v,transition:y}=w;if(S===_e){Q(f,v);return}if(S===Si){_(w);return}const m=()=>{i(f),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(w.shapeFlag&1&&y&&!y.persisted){const{leave:I,delayLeave:B}=y,R=()=>I(f,m);B?B(w.el,m,R):R()}else m()},Q=(w,S)=>{let f;for(;w!==S;)f=p(w),i(w),w=f;i(S)},ie=(w,S,f)=>{const{bum:v,scope:y,job:m,subTree:I,um:B,m:R,a:A,parent:q,slots:{__:K}}=w;Tl(R),Tl(A),v&&xi(v),q&&ce(K)&&K.forEach(ne=>{q.renderCache[ne]=void 0}),y.stop(),m&&(m.flags|=8,J(I,w,S,f)),B&&ot(B,S),ot(()=>{w.isUnmounted=!0},S),S&&S.pendingBranch&&!S.isUnmounted&&w.asyncDep&&!w.asyncResolved&&w.suspenseId===S.pendingId&&(S.deps--,S.deps===0&&S.resolve())},le=(w,S,f,v=!1,y=!1,m=0)=>{for(let I=m;I{if(w.shapeFlag&6)return me(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const S=p(w.anchor||w.el),f=S&&S[Nu];return f?p(f):S};let be=!1;const fe=(w,S,f)=>{w==null?S._vnode&&J(S._vnode,null,null,!0):E(S._vnode||null,w,S,null,null,null,f),S._vnode=w,be||(be=!0,ml(),Eu(),be=!1)},we={p:E,um:J,m:Y,r:ue,mt:T,mc:H,pc:$,pbc:Z,n:me,o:e};return{render:fe,hydrate:void 0,createApp:dh(fe)}}function Os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function In({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function wh(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Xr(e,t,n=!1){const o=e.children,i=t.children;if(ce(o)&&ce(i))for(let s=0;s>1,e[n[l]]0&&(t[o]=n[s-1]),n[s]=o)}}for(s=n.length,r=n[s-1];s-- >0;)n[s]=r,r=t[r];return n}function qu(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:qu(t)}function Tl(e){if(e)for(let t=0;tmt(Eh);function xe(e,t,n){return Ju(e,t,n)}function Ju(e,t,n=Pe){const{immediate:o,deep:i,flush:s,once:r}=n,l=je({},n),a=t&&o||!t&&s!=="post";let u;if(jo){if(s==="sync"){const h=Sh();u=h.__watcherHandles||(h.__watcherHandles=[])}else if(!a){const h=()=>{};return h.stop=Lt,h.resume=Lt,h.pause=Lt,h}}const c=et;l.call=(h,b,E)=>Tt(h,c,b,E);let d=!1;s==="post"?l.scheduler=h=>{ot(h,c&&c.suspense)}:s!=="sync"&&(d=!0,l.scheduler=(h,b)=>{b?h():Gr(h)}),l.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,c&&(h.id=c.uid,h.i=c))};const p=Rf(e,t,l);return jo&&(u?u.push(p):a&&p()),p}function Ch(e,t,n){const o=this.proxy,i=Le(e)?e.includes(".")?Qu(o,e):()=>o[e]:e.bind(o,o);let s;ve(t)?s=t:(s=t.handler,n=t);const r=ii(this),l=Ju(i,s.bind(o),n);return r(),l}function Qu(e,t){const n=t.split(".");return()=>{let o=e;for(let i=0;it==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${yt(t)}Modifiers`]||e[`${Tn(t)}Modifiers`];function Th(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||Pe;let i=n;const s=t.startsWith("update:"),r=s&&Nh(o,t.slice(7));r&&(r.trim&&(i=n.map(c=>Le(c)?c.trim():c)),r.number&&(i=n.map(Ai)));let l,a=o[l=wi(t)]||o[l=wi(yt(t))];!a&&s&&(a=o[l=wi(Tn(t))]),a&&Tt(a,e,6,i);const u=o[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Tt(u,e,6,i)}}function ec(e,t,n=!1){const o=t.emitsCache,i=o.get(e);if(i!==void 0)return i;const s=e.emits;let r={},l=!1;if(!ve(e)){const a=u=>{const c=ec(u,t,!0);c&&(l=!0,je(r,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(ke(e)&&o.set(e,null),null):(ce(s)?s.forEach(a=>r[a]=null):je(r,s),ke(e)&&o.set(e,r),r)}function cs(e,t){return!e||!Qi(t)?!1:(t=t.slice(2).replace(/Once$/,""),$e(e,t[0].toLowerCase()+t.slice(1))||$e(e,Tn(t))||$e(e,t))}function Ml(e){const{type:t,vnode:n,proxy:o,withProxy:i,propsOptions:[s],slots:r,attrs:l,emit:a,render:u,renderCache:c,props:d,data:p,setupState:h,ctx:b,inheritAttrs:E}=e,N=Bi(e);let M,P;try{if(n.shapeFlag&4){const _=i||o,O=_;M=Rt(u.call(O,_,c,d,h,p,b)),P=l}else{const _=t;M=Rt(_.length>1?_(d,{attrs:l,slots:r,emit:a}):_(d,null)),P=t.props?l:Mh(l)}}catch(_){Ao.length=0,ls(_,e,1),M=Me(Gt)}let g=M;if(P&&E!==!1){const _=Object.keys(P),{shapeFlag:O}=g;_.length&&O&7&&(s&&_.some(Ar)&&(P=$h(P,s)),g=Un(g,P,!1,!0))}return n.dirs&&(g=Un(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&Uo(g,n.transition),M=g,Bi(N),M}const Mh=e=>{let t;for(const n in e)(n==="class"||n==="style"||Qi(n))&&((t||(t={}))[n]=e[n]);return t},$h=(e,t)=>{const n={};for(const o in e)(!Ar(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Ih(e,t,n){const{props:o,children:i,component:s}=e,{props:r,children:l,patchFlag:a}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return o?$l(o,r,u):!!r;if(a&8){const c=t.dynamicProps;for(let d=0;de.__isSuspense;function Ph(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):Lf(e)}const _e=Symbol.for("v-fgt"),ds=Symbol.for("v-txt"),Gt=Symbol.for("v-cmt"),Si=Symbol.for("v-stc"),Ao=[];let st=null;function z(e=!1){Ao.push(st=e?null:[])}function Ah(){Ao.pop(),st=Ao[Ao.length-1]||null}let ro=1;function Il(e,t=!1){ro+=e,e<0&&st&&t&&(st.hasOnce=!0)}function nc(e){return e.dynamicChildren=ro>0?st||Qn:null,Ah(),ro>0&&st&&st.push(e),e}function W(e,t,n,o,i,s){return nc(x(e,t,n,o,i,s,!0))}function Re(e,t,n,o,i){return nc(Me(e,t,n,o,i,!0))}function Go(e){return e?e.__v_isVNode===!0:!1}function Jn(e,t){return e.type===t.type&&e.key===t.key}const oc=({key:e})=>e??null,Ci=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||Oe(e)||ve(e)?{i:Ze,r:e,k:t,f:!!n}:e:null);function x(e,t=null,n=null,o=0,i=null,s=e===_e?0:1,r=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&oc(t),ref:t&&Ci(t),scopeId:Cu,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:o,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Ze};return l?(Zr(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=Le(n)?8:16),ro>0&&!r&&st&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&st.push(a),a}const Me=Dh;function Dh(e,t=null,n=null,o=0,i=null,s=!1){if((!e||e===Ru)&&(e=Gt),Go(e)){const l=Un(e,t,!0);return n&&Zr(l,n),ro>0&&!s&&st&&(l.shapeFlag&6?st[st.indexOf(e)]=l:st.push(l)),l.patchFlag=-2,l}if(Uh(e)&&(e=e.__vccOpts),t){t=Oh(t);let{class:l,style:a}=t;l&&!Le(l)&&(t.class=ze(l)),ke(a)&&(Ur(a)&&!ce(a)&&(a=je({},a)),t.style=at(a))}const r=Le(e)?1:tc(e)?128:Ff(e)?64:ke(e)?4:ve(e)?2:0;return x(e,t,n,o,i,r,s,!0)}function Oh(e){return e?Ur(e)||ju(e)?je({},e):e:null}function Un(e,t,n=!1,o=!1){const{props:i,ref:s,patchFlag:r,children:l,transition:a}=e,u=t?Mn(i||{},t):i,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&oc(u),ref:t&&t.ref?n&&s?ce(s)?s.concat(Ci(t)):[s,Ci(t)]:Ci(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Un(e.ssContent),ssFallback:e.ssFallback&&Un(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&o&&Uo(c,a.clone(c)),c}function Be(e=" ",t=0){return Me(ds,null,e,t)}function Wr(e,t){const n=Me(Si,null,e);return n.staticCount=t,n}function Ne(e="",t=!1){return t?(z(),Re(Gt,null,e)):Me(Gt,null,e)}function Rt(e){return e==null||typeof e=="boolean"?Me(Gt):ce(e)?Me(_e,null,e.slice()):Go(e)?wn(e):Me(ds,null,String(e))}function wn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Un(e)}function Zr(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(o&65){const i=t.default;i&&(i._c&&(i._d=!1),Zr(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!ju(t)?t._ctx=Ze:i===3&&Ze&&(Ze.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ve(t)?(t={default:t,_ctx:Ze},n=32):(t=String(t),o&64?(n=16,t=[Be(t)]):n=8);e.children=t,e.shapeFlag|=n}function Mn(...e){const t={};for(let n=0;net||Ze;let Fi,ur;{const e=ns(),t=(n,o)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(o),s=>{i.length>1?i.forEach(r=>r(s)):i[0](s)}};Fi=t("__VUE_INSTANCE_SETTERS__",n=>et=n),ur=t("__VUE_SSR_SETTERS__",n=>jo=n)}const ii=e=>{const t=et;return Fi(e),e.scope.on(),()=>{e.scope.off(),Fi(t)}},kl=()=>{et&&et.scope.off(),Fi(null)};function ic(e){return e.vnode.shapeFlag&4}let jo=!1;function Lh(e,t=!1,n=!1){t&&ur(t);const{props:o,children:i}=e.vnode,s=ic(e);hh(e,o,s,t),mh(e,i,n||t);const r=s?Fh(e,t):void 0;return t&&ur(!1),r}function Fh(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,th);const{setup:o}=n;if(o){dn();const i=e.setupContext=o.length>1?rc(e):null,s=ii(e),r=oi(o,e,0,[e.props,i]),l=Za(r);if(fn(),s(),(l||e.sp)&&!no(e)&&Iu(e),l){if(r.then(kl,kl),t)return r.then(a=>{Pl(e,a)}).catch(a=>{ls(a,e,0)});e.asyncDep=r}else Pl(e,r)}else sc(e)}function Pl(e,t,n){ve(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ke(t)&&(e.setupState=yu(t)),sc(e)}function sc(e,t,n){const o=e.type;e.render||(e.render=o.render||Lt);{const i=ii(e);dn();try{sh(e)}finally{fn(),i()}}}const zh={get(e,t){return Qe(e,"get",""),e[t]}};function rc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,zh),slots:e.slots,emit:e.emit,expose:t}}function fs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(yu(an(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Po)return Po[n](e)},has(t,n){return n in t||n in Po}})):e.proxy}function Hh(e,t=!0){return ve(e)?e.displayName||e.name:e.name||t&&e.__name}function Uh(e){return ve(e)&&"__vccOpts"in e}const pe=(e,t)=>Df(e,t,jo);function Ie(e,t,n){const o=arguments.length;return o===2?ke(t)&&!ce(t)?Go(t)?Me(e,null,[t]):Me(e,t):Me(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&Go(n)&&(n=[n]),Me(e,t,n))}function Gh(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o0&&st&&st.push(e),!0}const jh="3.5.18";/** +* @vue/runtime-dom v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let cr;const Al=typeof window<"u"&&window.trustedTypes;if(Al)try{cr=Al.createPolicy("vue",{createHTML:e=>e})}catch{}const lc=cr?e=>cr.createHTML(e):e=>e,Yh="http://www.w3.org/2000/svg",Kh="http://www.w3.org/1998/Math/MathML",Qt=typeof document<"u"?document:null,Dl=Qt&&Qt.createElement("template"),Xh={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const i=t==="svg"?Qt.createElementNS(Yh,e):t==="mathml"?Qt.createElementNS(Kh,e):n?Qt.createElement(e,{is:n}):Qt.createElement(e);return e==="select"&&o&&o.multiple!=null&&i.setAttribute("multiple",o.multiple),i},createText:e=>Qt.createTextNode(e),createComment:e=>Qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,i,s){const r=n?n.previousSibling:t.lastChild;if(i&&(i===s||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===s||!(i=i.nextSibling)););else{Dl.innerHTML=lc(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const l=Dl.content;if(o==="svg"||o==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},gn="transition",_o="animation",lo=Symbol("_vtc"),ac={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Wh=je({},Gf,ac),kn=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ol=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function Zh(e){const t={};for(const C in e)C in ac||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:o,duration:i,enterFromClass:s=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:u=r,appearToClass:c=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,b=qh(i),E=b&&b[0],N=b&&b[1],{onBeforeEnter:M,onEnter:P,onEnterCancelled:g,onLeave:_,onLeaveCancelled:O,onBeforeAppear:U=M,onAppear:X=P,onAppearCancelled:H=g}=t,F=(C,ee,T,G)=>{C._enterCancelled=G,mn(C,ee?c:l),mn(C,ee?u:r),T&&T()},Z=(C,ee)=>{C._isLeaving=!1,mn(C,d),mn(C,h),mn(C,p),ee&&ee()},j=C=>(ee,T)=>{const G=C?X:P,k=()=>F(ee,C,T);kn(G,[ee,k]),Rl(()=>{mn(ee,C?a:s),At(ee,C?c:l),Ol(G)||Vl(ee,o,E,k)})};return je(t,{onBeforeEnter(C){kn(M,[C]),At(C,s),At(C,r)},onBeforeAppear(C){kn(U,[C]),At(C,a),At(C,u)},onEnter:j(!1),onAppear:j(!0),onLeave(C,ee){C._isLeaving=!0;const T=()=>Z(C,ee);At(C,d),C._enterCancelled?(At(C,p),dr()):(dr(),At(C,p)),Rl(()=>{C._isLeaving&&(mn(C,d),At(C,h),Ol(_)||Vl(C,o,N,T))}),kn(_,[C,T])},onEnterCancelled(C){F(C,!1,void 0,!0),kn(g,[C])},onAppearCancelled(C){F(C,!0,void 0,!0),kn(H,[C])},onLeaveCancelled(C){Z(C),kn(O,[C])}})}function qh(e){if(e==null)return null;if(ke(e))return[Rs(e.enter),Rs(e.leave)];{const t=Rs(e);return[t,t]}}function Rs(e){return Jd(e)}function At(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[lo]||(e[lo]=new Set)).add(t)}function mn(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[lo];n&&(n.delete(t),n.size||(e[lo]=void 0))}function Rl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Jh=0;function Vl(e,t,n,o){const i=e._endId=++Jh,s=()=>{i===e._endId&&o()};if(n!=null)return setTimeout(s,n);const{type:r,timeout:l,propCount:a}=uc(e,t);if(!r)return o();const u=r+"end";let c=0;const d=()=>{e.removeEventListener(u,p),s()},p=h=>{h.target===e&&++c>=a&&d()};setTimeout(()=>{c(n[b]||"").split(", "),i=o(`${gn}Delay`),s=o(`${gn}Duration`),r=Bl(i,s),l=o(`${_o}Delay`),a=o(`${_o}Duration`),u=Bl(l,a);let c=null,d=0,p=0;t===gn?r>0&&(c=gn,d=r,p=s.length):t===_o?u>0&&(c=_o,d=u,p=a.length):(d=Math.max(r,u),c=d>0?r>u?gn:_o:null,p=c?c===gn?s.length:a.length:0);const h=c===gn&&/\b(transform|all)(,|$)/.test(o(`${gn}Property`).toString());return{type:c,timeout:d,propCount:p,hasTransform:h}}function Bl(e,t){for(;e.lengthLl(n)+Ll(e[o])))}function Ll(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function dr(){return document.body.offsetHeight}function Qh(e,t,n){const o=e[lo];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Fl=Symbol("_vod"),ep=Symbol("_vsh"),tp=Symbol(""),np=/(^|;)\s*display\s*:/;function op(e,t,n){const o=e.style,i=Le(n);let s=!1;if(n&&!i){if(t)if(Le(t))for(const r of t.split(";")){const l=r.slice(0,r.indexOf(":")).trim();n[l]==null&&Ni(o,l,"")}else for(const r in t)n[r]==null&&Ni(o,r,"");for(const r in n)r==="display"&&(s=!0),Ni(o,r,n[r])}else if(i){if(t!==n){const r=o[tp];r&&(n+=";"+r),o.cssText=n,s=np.test(n)}}else t&&e.removeAttribute("style");Fl in e&&(e[Fl]=s?o.display:"",e[ep]&&(o.display="none"))}const zl=/\s*!important$/;function Ni(e,t,n){if(ce(n))n.forEach(o=>Ni(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=ip(e,t);zl.test(n)?e.setProperty(Tn(o),n.replace(zl,""),"important"):e[o]=n}}const Hl=["Webkit","Moz","ms"],Vs={};function ip(e,t){const n=Vs[t];if(n)return n;let o=yt(t);if(o!=="filter"&&o in e)return Vs[t]=o;o=ts(o);for(let i=0;iBs||(ap.then(()=>Bs=0),Bs=Date.now());function cp(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;Tt(dp(o,n.value),t,5,[o])};return n.value=e,n.attached=up(),n}function dp(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>i=>!i._stopped&&o&&o(i))}else return t}const Xl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,fp=(e,t,n,o,i,s)=>{const r=i==="svg";t==="class"?Qh(e,o,r):t==="style"?op(e,n,o):Qi(t)?Ar(t)||rp(e,t,n,o,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):hp(e,t,o,r))?(jl(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Gl(e,t,o,r,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Le(o))?jl(e,yt(t),o,s,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Gl(e,t,o,r))};function hp(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&Xl(t)&&ve(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return Xl(t)&&Le(n)?!1:t in e}const cc=new WeakMap,dc=new WeakMap,zi=Symbol("_moveCb"),Wl=Symbol("_enterCb"),pp=e=>(delete e.props.mode,e),gp=pp({name:"TransitionGroup",props:je({},Wh,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Xt(),o=Uf();let i,s;return Du(()=>{if(!i.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!bp(i[0].el,n.vnode.el,r)){i=[];return}i.forEach(mp),i.forEach(yp);const l=i.filter(_p);dr(),l.forEach(a=>{const u=a.el,c=u.style;At(u,r),c.transform=c.webkitTransform=c.transitionDuration="";const d=u[zi]=p=>{p&&p.target!==u||(!p||/transform$/.test(p.propertyName))&&(u.removeEventListener("transitionend",d),u[zi]=null,mn(u,r))};u.addEventListener("transitionend",d)}),i=[]}),()=>{const r=Se(e),l=Zh(r);let a=r.tag||_e;if(i=[],s)for(let u=0;u{l.split(/\s+/).forEach(a=>a&&o.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const s=t.nodeType===1?t:t.parentNode;s.appendChild(o);const{hasTransform:r}=uc(o);return s.removeChild(o),r}const ao=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>xi(t,n):t};function wp(e){e.target.composing=!0}function Zl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const un=Symbol("_assign"),tt={created(e,{modifiers:{lazy:t,trim:n,number:o}},i){e[un]=ao(i);const s=o||i.props&&i.props.type==="number";En(e,t?"change":"input",r=>{if(r.target.composing)return;let l=e.value;n&&(l=l.trim()),s&&(l=Ai(l)),e[un](l)}),n&&En(e,"change",()=>{e.value=e.value.trim()}),t||(En(e,"compositionstart",wp),En(e,"compositionend",Zl),En(e,"change",Zl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:o,trim:i,number:s}},r){if(e[un]=ao(r),e.composing)return;const l=(s||e.type==="number")&&!/^0\d/.test(e.value)?Ai(e.value):e.value,a=t??"";l!==a&&(document.activeElement===e&&e.type!=="range"&&(o&&t===n||i&&e.value.trim()===a)||(e.value=a))}},Ke={deep:!0,created(e,t,n){e[un]=ao(n),En(e,"change",()=>{const o=e._modelValue,i=Yo(e),s=e.checked,r=e[un];if(ce(o)){const l=Rr(o,i),a=l!==-1;if(s&&!a)r(o.concat(i));else if(!s&&a){const u=[...o];u.splice(l,1),r(u)}}else if(po(o)){const l=new Set(o);s?l.add(i):l.delete(i),r(l)}else r(fc(e,s))})},mounted:ql,beforeUpdate(e,t,n){e[un]=ao(n),ql(e,t,n)}};function ql(e,{value:t,oldValue:n},o){e._modelValue=t;let i;if(ce(t))i=Rr(t,o.props.value)>-1;else if(po(t))i=t.has(o.props.value);else{if(t===n)return;i=ni(t,fc(e,!0))}e.checked!==i&&(e.checked=i)}const Ft={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const i=po(t);En(e,"change",()=>{const s=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?Ai(Yo(r)):Yo(r));e[un](e.multiple?i?new Set(s):s:s[0]),e._assigning=!0,ht(()=>{e._assigning=!1})}),e[un]=ao(o)},mounted(e,{value:t}){Jl(e,t)},beforeUpdate(e,t,n){e[un]=ao(n)},updated(e,{value:t}){e._assigning||Jl(e,t)}};function Jl(e,t){const n=e.multiple,o=ce(t);if(!(n&&!o&&!po(t))){for(let i=0,s=e.options.length;iString(u)===String(l)):r.selected=Rr(t,l)>-1}else r.selected=t.has(l);else if(ni(Yo(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Yo(e){return"_value"in e?e._value:e.value}function fc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const xp=["ctrl","shift","alt","meta"],Ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>xp.some(n=>e[`${n}Key`]&&!t.includes(n))},Do=(e,t)=>{const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=(i,...s)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=i=>{if(!("key"in i))return;const s=Tn(i.key);if(t.some(r=>r===s||Sp[r]===s))return e(i)})},Cp=je({patchProp:fp},Xh);let Ql;function Np(){return Ql||(Ql=_h(Cp))}const hc=(...e)=>{const t=Np().createApp(...e),{mount:n}=t;return t.mount=o=>{const i=Mp(o);if(!i)return;const s=t._component;!ve(s)&&!s.render&&!s.template&&(s.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,Tp(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t};function Tp(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Mp(e){return Le(e)?document.querySelector(e):e}/*! + * pinia v3.0.3 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let pc;const hs=e=>pc=e,gc=Symbol();function hr(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Oo;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Oo||(Oo={}));function $p(){const e=os(!0),t=e.run(()=>te({}));let n=[],o=[];const i=an({install(s){hs(i),i._a=s,s.provide(gc,i),s.config.globalProperties.$pinia=i,o.forEach(r=>n.push(r)),o=[]},use(s){return this._a?n.push(s):o.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}const vc=()=>{};function ea(e,t,n,o=vc){e.push(t);const i=()=>{const s=e.indexOf(t);s>-1&&(e.splice(s,1),o())};return!n&&is()&&To(i),i}function Wn(e,...t){e.slice().forEach(n=>{n(...t)})}const Ip=e=>e(),ta=Symbol(),Ls=Symbol();function pr(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],i=e[n];hr(i)&&hr(o)&&e.hasOwnProperty(n)&&!Oe(o)&&!ln(o)?e[n]=pr(i,o):e[n]=o}return e}const kp=Symbol();function Pp(e){return!hr(e)||!Object.prototype.hasOwnProperty.call(e,kp)}const{assign:yn}=Object;function Ap(e){return!!(Oe(e)&&e.effect)}function Dp(e,t,n,o){const{state:i,actions:s,getters:r}=t,l=n.state.value[e];let a;function u(){l||(n.state.value[e]=i?i():{});const c=_u(n.state.value[e]);return yn(c,s,Object.keys(r||{}).reduce((d,p)=>(d[p]=an(pe(()=>{hs(n);const h=n._s.get(e);return r[p].call(h,h)})),d),{}))}return a=mc(e,u,t,n,o,!0),a}function mc(e,t,n={},o,i,s){let r;const l=yn({actions:{}},n),a={deep:!0};let u,c,d=[],p=[],h;const b=o.state.value[e];!s&&!b&&(o.state.value[e]={}),te({});let E;function N(H){let F;u=c=!1,typeof H=="function"?(H(o.state.value[e]),F={type:Oo.patchFunction,storeId:e,events:h}):(pr(o.state.value[e],H),F={type:Oo.patchObject,payload:H,storeId:e,events:h});const Z=E=Symbol();ht().then(()=>{E===Z&&(u=!0)}),c=!0,Wn(d,F,o.state.value[e])}const M=s?function(){const{state:F}=n,Z=F?F():{};this.$patch(j=>{yn(j,Z)})}:vc;function P(){r.stop(),d=[],p=[],o._s.delete(e)}const g=(H,F="")=>{if(ta in H)return H[Ls]=F,H;const Z=function(){hs(o);const j=Array.from(arguments),C=[],ee=[];function T(L){C.push(L)}function G(L){ee.push(L)}Wn(p,{args:j,name:Z[Ls],store:O,after:T,onError:G});let k;try{k=H.apply(this&&this.$id===e?this:O,j)}catch(L){throw Wn(ee,L),L}return k instanceof Promise?k.then(L=>(Wn(C,L),L)).catch(L=>(Wn(ee,L),Promise.reject(L))):(Wn(C,k),k)};return Z[ta]=!0,Z[Ls]=F,Z},_={_p:o,$id:e,$onAction:ea.bind(null,p),$patch:N,$reset:M,$subscribe(H,F={}){const Z=ea(d,H,F.detached,()=>j()),j=r.run(()=>xe(()=>o.state.value[e],C=>{(F.flush==="sync"?c:u)&&H({storeId:e,type:Oo.direct,events:h},C)},yn({},a,F)));return Z},$dispose:P},O=go(_);o._s.set(e,O);const X=(o._a&&o._a.runWithContext||Ip)(()=>o._e.run(()=>(r=os()).run(()=>t({action:g}))));for(const H in X){const F=X[H];if(Oe(F)&&!Ap(F)||ln(F))s||(b&&Pp(F)&&(Oe(F)?F.value=b[H]:pr(F,b[H])),o.state.value[e][H]=F);else if(typeof F=="function"){const Z=g(F,H);X[H]=Z,l.actions[H]=F}}return yn(O,X),yn(Se(O),X),Object.defineProperty(O,"$state",{get:()=>o.state.value[e],set:H=>{N(F=>{yn(F,H)})}}),o._p.forEach(H=>{yn(O,r.run(()=>H({store:O,app:o._a,pinia:o,options:l})))}),b&&s&&n.hydrate&&n.hydrate(O.$state,b),u=!0,c=!0,O}/*! #__NO_SIDE_EFFECTS__ */function yc(e,t,n){let o;const i=typeof t=="function";o=i?n:t;function s(r,l){const a=fh();return r=r||(a?mt(gc,null):null),r&&hs(r),r=pc,r._s.has(e)||(i?mc(e,t,o,r):Dp(e,o,r)),r._s.get(e)}return s.$id=e,s}function Op(e){const t=Se(e),n={};for(const o in t){const i=t[o];i.effect?n[o]=pe({get:()=>e[o],set(s){e[o]=s}}):(Oe(i)||ln(i))&&(n[o]=Ve(e,o))}return n}var Rp=Object.defineProperty,na=Object.getOwnPropertySymbols,Vp=Object.prototype.hasOwnProperty,Bp=Object.prototype.propertyIsEnumerable,oa=(e,t,n)=>t in e?Rp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_c=(e,t)=>{for(var n in t||(t={}))Vp.call(t,n)&&oa(e,n,t[n]);if(na)for(var n of na(t))Bp.call(t,n)&&oa(e,n,t[n]);return e},ps=e=>typeof e=="function",gs=e=>typeof e=="string",bc=e=>gs(e)&&e.trim().length>0,Lp=e=>typeof e=="number",On=e=>typeof e>"u",Ko=e=>typeof e=="object"&&e!==null,Fp=e=>zt(e,"tag")&&bc(e.tag),wc=e=>window.TouchEvent&&e instanceof TouchEvent,xc=e=>zt(e,"component")&&Ec(e.component),zp=e=>ps(e)||Ko(e),Ec=e=>!On(e)&&(gs(e)||zp(e)||xc(e)),ia=e=>Ko(e)&&["height","width","right","left","top","bottom"].every(t=>Lp(e[t])),zt=(e,t)=>(Ko(e)||ps(e))&&t in e,Hp=(e=>()=>e++)(0);function Fs(e){return wc(e)?e.targetTouches[0].clientX:e.clientX}function sa(e){return wc(e)?e.targetTouches[0].clientY:e.clientY}var Up=e=>{On(e.remove)?e.parentNode&&e.parentNode.removeChild(e):e.remove()},si=e=>xc(e)?si(e.component):Fp(e)?he({render(){return e}}):typeof e=="string"?e:Se(oe(e)),Gp=e=>{if(typeof e=="string")return e;const t=zt(e,"props")&&Ko(e.props)?e.props:{},n=zt(e,"listeners")&&Ko(e.listeners)?e.listeners:{};return{component:si(e),props:t,listeners:n}},jp=()=>typeof window<"u",qr=class{constructor(){this.allHandlers={}}getHandlers(e){return this.allHandlers[e]||[]}on(e,t){const n=this.getHandlers(e);n.push(t),this.allHandlers[e]=n}off(e,t){const n=this.getHandlers(e);n.splice(n.indexOf(t)>>>0,1)}emit(e,t){this.getHandlers(e).forEach(o=>o(t))}},Yp=e=>["on","off","emit"].every(t=>zt(e,t)&&ps(e[t])),dt;(function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.DEFAULT="default"})(dt||(dt={}));var Xo;(function(e){e.TOP_LEFT="top-left",e.TOP_CENTER="top-center",e.TOP_RIGHT="top-right",e.BOTTOM_LEFT="bottom-left",e.BOTTOM_CENTER="bottom-center",e.BOTTOM_RIGHT="bottom-right"})(Xo||(Xo={}));var ft;(function(e){e.ADD="add",e.DISMISS="dismiss",e.UPDATE="update",e.CLEAR="clear",e.UPDATE_DEFAULTS="update_defaults"})(ft||(ft={}));var Et="Vue-Toastification",bt={type:{type:String,default:dt.DEFAULT},classNames:{type:[String,Array],default:()=>[]},trueBoolean:{type:Boolean,default:!0}},Sc={type:bt.type,customIcon:{type:[String,Boolean,Object,Function],default:!0}},Ti={component:{type:[String,Object,Function,Boolean],default:"button"},classNames:bt.classNames,showOnHover:{type:Boolean,default:!1},ariaLabel:{type:String,default:"close"}},gr={timeout:{type:[Number,Boolean],default:5e3},hideProgressBar:{type:Boolean,default:!1},isRunning:{type:Boolean,default:!1}},Cc={transition:{type:[Object,String],default:`${Et}__bounce`}},Kp={position:{type:String,default:Xo.TOP_RIGHT},draggable:bt.trueBoolean,draggablePercent:{type:Number,default:.6},pauseOnFocusLoss:bt.trueBoolean,pauseOnHover:bt.trueBoolean,closeOnClick:bt.trueBoolean,timeout:gr.timeout,hideProgressBar:gr.hideProgressBar,toastClassName:bt.classNames,bodyClassName:bt.classNames,icon:Sc.customIcon,closeButton:Ti.component,closeButtonClassName:Ti.classNames,showCloseButtonOnHover:Ti.showOnHover,accessibility:{type:Object,default:()=>({toastRole:"alert",closeButtonLabel:"close"})},rtl:{type:Boolean,default:!1},eventBus:{type:Object,required:!1,default:()=>new qr}},Xp={id:{type:[String,Number],required:!0,default:0},type:bt.type,content:{type:[String,Object,Function],required:!0,default:""},onClick:{type:Function,default:void 0},onClose:{type:Function,default:void 0}},Wp={container:{type:[Object,Function],default:()=>document.body},newestOnTop:bt.trueBoolean,maxToasts:{type:Number,default:20},transition:Cc.transition,toastDefaults:Object,filterBeforeCreate:{type:Function,default:e=>e},filterToasts:{type:Function,default:e=>e},containerClassName:bt.classNames,onMounted:Function,shareAppContext:[Boolean,Object]},cn={CORE_TOAST:Kp,TOAST:Xp,CONTAINER:Wp,PROGRESS_BAR:gr,ICON:Sc,TRANSITION:Cc,CLOSE_BUTTON:Ti},Nc=he({name:"VtProgressBar",props:cn.PROGRESS_BAR,data(){return{hasClass:!0}},computed:{style(){return{animationDuration:`${this.timeout}ms`,animationPlayState:this.isRunning?"running":"paused",opacity:this.hideProgressBar?0:1}},cpClass(){return this.hasClass?`${Et}__progress-bar`:""}},watch:{timeout(){this.hasClass=!1,this.$nextTick(()=>this.hasClass=!0)}},mounted(){this.$el.addEventListener("animationend",this.animationEnded)},beforeUnmount(){this.$el.removeEventListener("animationend",this.animationEnded)},methods:{animationEnded(){this.$emit("close-toast")}}});function Zp(e,t){return z(),W("div",{style:at(e.style),class:ze(e.cpClass)},null,6)}Nc.render=Zp;var qp=Nc,Tc=he({name:"VtCloseButton",props:cn.CLOSE_BUTTON,computed:{buttonComponent(){return this.component!==!1?si(this.component):"button"},classes(){const e=[`${Et}__close-button`];return this.showOnHover&&e.push("show-on-hover"),e.concat(this.classNames)}}}),Jp=Be(" × ");function Qp(e,t){return z(),Re(vo(e.buttonComponent),Mn({"aria-label":e.ariaLabel,class:e.classes},e.$attrs),{default:Ut(()=>[Jp]),_:1},16,["aria-label","class"])}Tc.render=Qp;var eg=Tc,Mc={},tg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"check-circle",class:"svg-inline--fa fa-check-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},ng=x("path",{fill:"currentColor",d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},null,-1),og=[ng];function ig(e,t){return z(),W("svg",tg,og)}Mc.render=ig;var sg=Mc,$c={},rg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"info-circle",class:"svg-inline--fa fa-info-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},lg=x("path",{fill:"currentColor",d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},null,-1),ag=[lg];function ug(e,t){return z(),W("svg",rg,ag)}$c.render=ug;var ra=$c,Ic={},cg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-circle",class:"svg-inline--fa fa-exclamation-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},dg=x("path",{fill:"currentColor",d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),fg=[dg];function hg(e,t){return z(),W("svg",cg,fg)}Ic.render=hg;var pg=Ic,kc={},gg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-triangle",class:"svg-inline--fa fa-exclamation-triangle fa-w-18",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},vg=x("path",{fill:"currentColor",d:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),mg=[vg];function yg(e,t){return z(),W("svg",gg,mg)}kc.render=yg;var _g=kc,Pc=he({name:"VtIcon",props:cn.ICON,computed:{customIconChildren(){return zt(this.customIcon,"iconChildren")?this.trimValue(this.customIcon.iconChildren):""},customIconClass(){return gs(this.customIcon)?this.trimValue(this.customIcon):zt(this.customIcon,"iconClass")?this.trimValue(this.customIcon.iconClass):""},customIconTag(){return zt(this.customIcon,"iconTag")?this.trimValue(this.customIcon.iconTag,"i"):"i"},hasCustomIcon(){return this.customIconClass.length>0},component(){return this.hasCustomIcon?this.customIconTag:Ec(this.customIcon)?si(this.customIcon):this.iconTypeComponent},iconTypeComponent(){return{[dt.DEFAULT]:ra,[dt.INFO]:ra,[dt.SUCCESS]:sg,[dt.ERROR]:_g,[dt.WARNING]:pg}[this.type]},iconClasses(){const e=[`${Et}__icon`];return this.hasCustomIcon?e.concat(this.customIconClass):e}},methods:{trimValue(e,t=""){return bc(e)?e.trim():t}}});function bg(e,t){return z(),Re(vo(e.component),{class:ze(e.iconClasses)},{default:Ut(()=>[Be(Ae(e.customIconChildren),1)]),_:1},8,["class"])}Pc.render=bg;var wg=Pc,Ac=he({name:"VtToast",components:{ProgressBar:qp,CloseButton:eg,Icon:wg},inheritAttrs:!1,props:Object.assign({},cn.CORE_TOAST,cn.TOAST),data(){return{isRunning:!0,disableTransitions:!1,beingDragged:!1,dragStart:0,dragPos:{x:0,y:0},dragRect:{}}},computed:{classes(){const e=[`${Et}__toast`,`${Et}__toast--${this.type}`,`${this.position}`].concat(this.toastClassName);return this.disableTransitions&&e.push("disable-transition"),this.rtl&&e.push(`${Et}__toast--rtl`),e},bodyClasses(){return[`${Et}__toast-${gs(this.content)?"body":"component-body"}`].concat(this.bodyClassName)},draggableStyle(){return this.dragStart===this.dragPos.x?{}:this.beingDragged?{transform:`translateX(${this.dragDelta}px)`,opacity:1-Math.abs(this.dragDelta/this.removalDistance)}:{transition:"transform 0.2s, opacity 0.2s",transform:"translateX(0)",opacity:1}},dragDelta(){return this.beingDragged?this.dragPos.x-this.dragStart:0},removalDistance(){return ia(this.dragRect)?(this.dragRect.right-this.dragRect.left)*this.draggablePercent:0}},mounted(){this.draggable&&this.draggableSetup(),this.pauseOnFocusLoss&&this.focusSetup()},beforeUnmount(){this.draggable&&this.draggableCleanup(),this.pauseOnFocusLoss&&this.focusCleanup()},methods:{hasProp:zt,getVueComponentFromObj:si,closeToast(){this.eventBus.emit(ft.DISMISS,this.id)},clickHandler(){this.onClick&&this.onClick(this.closeToast),this.closeOnClick&&(!this.beingDragged||this.dragStart===this.dragPos.x)&&this.closeToast()},timeoutHandler(){this.closeToast()},hoverPause(){this.pauseOnHover&&(this.isRunning=!1)},hoverPlay(){this.pauseOnHover&&(this.isRunning=!0)},focusPause(){this.isRunning=!1},focusPlay(){this.isRunning=!0},focusSetup(){addEventListener("blur",this.focusPause),addEventListener("focus",this.focusPlay)},focusCleanup(){removeEventListener("blur",this.focusPause),removeEventListener("focus",this.focusPlay)},draggableSetup(){const e=this.$el;e.addEventListener("touchstart",this.onDragStart,{passive:!0}),e.addEventListener("mousedown",this.onDragStart),addEventListener("touchmove",this.onDragMove,{passive:!1}),addEventListener("mousemove",this.onDragMove),addEventListener("touchend",this.onDragEnd),addEventListener("mouseup",this.onDragEnd)},draggableCleanup(){const e=this.$el;e.removeEventListener("touchstart",this.onDragStart),e.removeEventListener("mousedown",this.onDragStart),removeEventListener("touchmove",this.onDragMove),removeEventListener("mousemove",this.onDragMove),removeEventListener("touchend",this.onDragEnd),removeEventListener("mouseup",this.onDragEnd)},onDragStart(e){this.beingDragged=!0,this.dragPos={x:Fs(e),y:sa(e)},this.dragStart=Fs(e),this.dragRect=this.$el.getBoundingClientRect()},onDragMove(e){this.beingDragged&&(e.preventDefault(),this.isRunning&&(this.isRunning=!1),this.dragPos={x:Fs(e),y:sa(e)})},onDragEnd(){this.beingDragged&&(Math.abs(this.dragDelta)>=this.removalDistance?(this.disableTransitions=!0,this.$nextTick(()=>this.closeToast())):setTimeout(()=>{this.beingDragged=!1,ia(this.dragRect)&&this.pauseOnHover&&this.dragRect.bottom>=this.dragPos.y&&this.dragPos.y>=this.dragRect.top&&this.dragRect.left<=this.dragPos.x&&this.dragPos.x<=this.dragRect.right?this.isRunning=!1:this.isRunning=!0}))}}}),xg=["role"];function Eg(e,t){const n=Bn("Icon"),o=Bn("CloseButton"),i=Bn("ProgressBar");return z(),W("div",{class:ze(e.classes),style:at(e.draggableStyle),onClick:t[0]||(t[0]=(...s)=>e.clickHandler&&e.clickHandler(...s)),onMouseenter:t[1]||(t[1]=(...s)=>e.hoverPause&&e.hoverPause(...s)),onMouseleave:t[2]||(t[2]=(...s)=>e.hoverPlay&&e.hoverPlay(...s))},[e.icon?(z(),Re(n,{key:0,"custom-icon":e.icon,type:e.type},null,8,["custom-icon","type"])):Ne("v-if",!0),x("div",{role:e.accessibility.toastRole||"alert",class:ze(e.bodyClasses)},[typeof e.content=="string"?(z(),W(_e,{key:0},[Be(Ae(e.content),1)],2112)):(z(),Re(vo(e.getVueComponentFromObj(e.content)),Mn({key:1,"toast-id":e.id},e.hasProp(e.content,"props")?e.content.props:{},eh(e.hasProp(e.content,"listeners")?e.content.listeners:{}),{onCloseToast:e.closeToast}),null,16,["toast-id","onCloseToast"]))],10,xg),e.closeButton?(z(),Re(o,{key:1,component:e.closeButton,"class-names":e.closeButtonClassName,"show-on-hover":e.showCloseButtonOnHover,"aria-label":e.accessibility.closeButtonLabel,onClick:Do(e.closeToast,["stop"])},null,8,["component","class-names","show-on-hover","aria-label","onClick"])):Ne("v-if",!0),e.timeout?(z(),Re(i,{key:2,"is-running":e.isRunning,"hide-progress-bar":e.hideProgressBar,timeout:e.timeout,onCloseToast:e.timeoutHandler},null,8,["is-running","hide-progress-bar","timeout","onCloseToast"])):Ne("v-if",!0)],38)}Ac.render=Eg;var Sg=Ac,Dc=he({name:"VtTransition",props:cn.TRANSITION,emits:["leave"],methods:{hasProp:zt,leave(e){e instanceof HTMLElement&&(e.style.left=e.offsetLeft+"px",e.style.top=e.offsetTop+"px",e.style.width=getComputedStyle(e).width,e.style.position="absolute")}}});function Cg(e,t){return z(),Re(vp,{tag:"div","enter-active-class":e.transition.enter?e.transition.enter:`${e.transition}-enter-active`,"move-class":e.transition.move?e.transition.move:`${e.transition}-move`,"leave-active-class":e.transition.leave?e.transition.leave:`${e.transition}-leave-active`,onLeave:e.leave},{default:Ut(()=>[Ct(e.$slots,"default")]),_:3},8,["enter-active-class","move-class","leave-active-class","onLeave"])}Dc.render=Cg;var Ng=Dc,Oc=he({name:"VueToastification",devtools:{hide:!0},components:{Toast:Sg,VtTransition:Ng},props:Object.assign({},cn.CORE_TOAST,cn.CONTAINER,cn.TRANSITION),data(){return{count:0,positions:Object.values(Xo),toasts:{},defaults:{}}},computed:{toastArray(){return Object.values(this.toasts)},filteredToasts(){return this.defaults.filterToasts(this.toastArray)}},beforeMount(){const e=this.eventBus;e.on(ft.ADD,this.addToast),e.on(ft.CLEAR,this.clearToasts),e.on(ft.DISMISS,this.dismissToast),e.on(ft.UPDATE,this.updateToast),e.on(ft.UPDATE_DEFAULTS,this.updateDefaults),this.defaults=this.$props},mounted(){this.setup(this.container)},methods:{async setup(e){ps(e)&&(e=await e()),Up(this.$el),e.appendChild(this.$el)},setToast(e){On(e.id)||(this.toasts[e.id]=e)},addToast(e){e.content=Gp(e.content);const t=Object.assign({},this.defaults,e.type&&this.defaults.toastDefaults&&this.defaults.toastDefaults[e.type],e),n=this.defaults.filterBeforeCreate(t,this.toastArray);n&&this.setToast(n)},dismissToast(e){const t=this.toasts[e];!On(t)&&!On(t.onClose)&&t.onClose(),delete this.toasts[e]},clearToasts(){Object.keys(this.toasts).forEach(e=>{this.dismissToast(e)})},getPositionToasts(e){const t=this.filteredToasts.filter(n=>n.position===e).slice(0,this.defaults.maxToasts);return this.defaults.newestOnTop?t.reverse():t},updateDefaults(e){On(e.container)||this.setup(e.container),this.defaults=Object.assign({},this.defaults,e)},updateToast({id:e,options:t,create:n}){this.toasts[e]?(t.timeout&&t.timeout===this.toasts[e].timeout&&t.timeout++,this.setToast(Object.assign({},this.toasts[e],t))):n&&this.addToast(Object.assign({},{id:e},t))},getClasses(e){return[`${Et}__container`,e].concat(this.defaults.containerClassName)}}});function Tg(e,t){const n=Bn("Toast"),o=Bn("VtTransition");return z(),W("div",null,[(z(!0),W(_e,null,Ye(e.positions,i=>(z(),W("div",{key:i},[Me(o,{transition:e.defaults.transition,class:ze(e.getClasses(i))},{default:Ut(()=>[(z(!0),W(_e,null,Ye(e.getPositionToasts(i),s=>(z(),Re(n,Mn({key:s.id},s),null,16))),128))]),_:2},1032,["transition","class"])]))),128))])}Oc.render=Tg;var Mg=Oc,la=(e={},t=!0)=>{const n=e.eventBus=e.eventBus||new qr;t&&ht(()=>{const s=hc(Mg,_c({},e)),r=s.mount(document.createElement("div")),l=e.onMounted;if(On(l)||l(r,s),e.shareAppContext){const a=e.shareAppContext;a===!0?console.warn(`[${Et}] App to share context with was not provided.`):(s._context.components=a._context.components,s._context.directives=a._context.directives,s._context.mixins=a._context.mixins,s._context.provides=a._context.provides,s.config.globalProperties=a.config.globalProperties)}});const o=(s,r)=>{const l=Object.assign({},{id:Hp(),type:dt.DEFAULT},r,{content:s});return n.emit(ft.ADD,l),l.id};o.clear=()=>n.emit(ft.CLEAR,void 0),o.updateDefaults=s=>{n.emit(ft.UPDATE_DEFAULTS,s)},o.dismiss=s=>{n.emit(ft.DISMISS,s)};function i(s,{content:r,options:l},a=!1){const u=Object.assign({},l,{content:r});n.emit(ft.UPDATE,{id:s,options:u,create:a})}return o.update=i,o.success=(s,r)=>o(s,Object.assign({},r,{type:dt.SUCCESS})),o.info=(s,r)=>o(s,Object.assign({},r,{type:dt.INFO})),o.error=(s,r)=>o(s,Object.assign({},r,{type:dt.ERROR})),o.warning=(s,r)=>o(s,Object.assign({},r,{type:dt.WARNING})),o},$g=()=>{const e=()=>console.warn(`[${Et}] This plugin does not support SSR!`);return new Proxy(e,{get(){return e}})};function Rc(e){return jp()?Yp(e)?la({eventBus:e},!1):la(e,!0):$g()}var Vc=Symbol("VueToastification"),Bc=new qr,Ig=(e,t)=>{t?.shareAppContext===!0&&(t.shareAppContext=e);const n=Rc(_c({eventBus:Bc},t));e.provide(Vc,n)},kg=e=>{const t=Xt()?mt(Vc,void 0):void 0;return t||Rc(Bc)},Pg=Ig;const Ag={class:"StepWizard"},Dg={class:"step-indicators"},Og=["onClick"],Rg={class:"step-content"},Vg={class:"step-actions"},Bg=he({__name:"StepWizard",props:{steps:{type:Array,required:!0}},setup(e){const t=e,n=te(0),o=()=>{n.value{s>=0&&s(z(),W("div",Ag,[x("div",Dg,[(z(!0),W(_e,null,Ye(e.steps,(l,a)=>(z(),W("div",{key:a,class:ze(["step",{active:n.value===a,completed:n.value>a}]),onClick:u=>i(a)},null,10,Og))),128))]),x("div",Rg,[(z(),Re(vo(e.steps[n.value])))]),x("div",Vg,[n.value>0?(z(),W("button",{key:0,onClick:r[0]||(r[0]=l=>n.value--),class:"btn prev-btn"},"Previous")):Ne("",!0),n.value{const n=e.__vccOpts||e;for(const[o,i]of t)n[o]=i;return n},Lg=Xe(Bg,[["__scopeId","data-v-9f8c12c9"]]),_t=yc("projectSpec",()=>{const e=te({project_name:"asd",database:"",models:[],custom_enums:[]}),t=te(!1),n=te([{name:"UserRole",values:[{name:"ADMIN",value:"ADMIN"},{name:"USER",value:"auto()"}]}]),o=te([{id:"user",data:{fields:[{name:"id",type:"UUID",isPrimaryKey:!0,defaultValue:"uuid.uuid4"},{name:"name",type:"String"},{name:"email",type:"String"},{name:"role",type:"Enum",typeEnum:"UserRole",defaultValue:"ADMIN"},{name:"created_at",type:"DateTime"},{name:"updated_at",type:"DateTime"}],relations:[{fieldName:"post_id",targetModel:"post",onDelete:"CASCADE",isNullable:!1,isUnique:!1,isIndex:!1}]},type:"custom",position:{x:50,y:50}},{id:"post",data:{fields:[{name:"id",type:"UUID",isPrimaryKey:!0,defaultValue:"uuid.uuid4"},{name:"created_at",type:"DateTime"},{name:"updated_at",type:"DateTime"}],relations:[]},type:"custom",position:{x:150,y:355}}]),i=te([{id:"(user)-(post)-(post_id)",source:"user",target:"post",type:"smoothstep"}]),s=()=>{const $=o.value.map(V=>{const Y=V.id,J=V.data.fields.map(Q=>({name:Q.name,type:Q.type,type_enum:Q.typeEnum??null,primary_key:Q.isPrimaryKey??!1,nullable:Q.isNullable??!1,unique:Q.isUnique??!1,index:Q.isIndex??!1,default_value:Q.defaultValue??null,extra_kwargs:null,metadata:{is_created_at_timestamp:Q.name==="created_at",is_updated_at_timestamp:Q.name==="updated_at",is_foreign_key:!1}})),ue=V.data.relations.map(Q=>({field_name:Q.fieldName,target_model:Q.targetModel,back_populates:null,on_delete:Q.onDelete??"CASCADE",nullable:Q.isNullable??!1,unique:Q.isUnique??!1,index:Q.isIndex??!1}));return{name:Y,fields:J,relationships:ue,metadata:{create_endpoints:!0,create_tests:!0,create_daos:!0,create_dtos:!0,is_auth_model:!1}}}),D=n.value.map(V=>({name:V.name,values:V.values.map(Y=>({name:Y.name,value:Y.value}))}));return{project_name:e.value.project_name,use_postgres:!0,use_alembic:!0,models:$,custom_enums:D}},r=async()=>{const $=s();try{const D=await fetch("http://localhost:8000/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($)});if(!D.ok){const Y=await D.text();throw new Error(`Error ${D.status}: ${Y}`)}const V=await D.json();return console.log("Generation successful:",V),V}catch(D){throw console.error("Generation failed:",D),D}},l=$=>o.value.find(D=>D.id===$),a=$=>{l($)||o.value.push({id:$,data:{fields:[],relations:[]},type:"custom",position:{x:100,y:100}})},u=$=>{l($)&&(o.value=o.value.filter(V=>V.id!==$),i.value=i.value.filter(V=>V.source!==$&&V.target!==$),o.value.forEach(V=>{V.data.relations&&(V.data.relations=V.data.relations?.filter(Y=>Y.targetModel!==$))}))},c=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);if(l(D))throw new Error(`Duplicate name: ${D}`);V.id=D,i.value.forEach(J=>{J.source===$&&(J.source=D),J.target===$&&(J.target=D),J.id=J.id.replace(`(${$})`,`(${D})`)}),o.value.forEach(J=>{J.data.relations.forEach(ue=>{ue.targetModel===$&&(ue.targetModel=D)})})},d=($,D)=>{const V=$.data.fields.find(J=>J.name===D),Y=$.data.relations.find(J=>J.fieldName===D);return!!V||!!Y},p=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);if(d(V,D.name))throw new Error(`Field name already exists for model: ${$}`);V.data.fields.push(D)},h=($,D,V)=>{const Y=l($);if(!Y)throw new Error(`Model does not exist: ${$}`);const J=Y.data.fields.findIndex(ue=>ue.name===D);if(J===-1)throw new Error(`Field does not exist: ${D}`);Y.data.fields[J]=V,console.log(V)},b=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);V.data.fields=V.data.fields.filter(Y=>Y.name!==D)},E=($,D,V)=>{const Y=l($);Y&&(_($,D,V.fieldName),Y.data.relations.push(V))},N=($,D,V)=>{const Y=l($);Y&&(Y.data.relations=Y.data.relations.filter(J=>J.fieldName!==V),O($,D,V))},M=($,D,V,Y)=>{const J=l($);if(!J||!J.data.relations)return;const ue=J.data.relations.findIndex(me=>me.fieldName===V);J.data.relations[ue]=Y;const Q=g($,D,V),ie=P(Q);if(!ie)return;const le=g($,Y.targetModel,Y.fieldName);ie.id=le,ie.source=$,ie.target=Y.targetModel},P=$=>i.value.find(D=>D.id===$),g=($,D,V)=>`(${$})-(${D})-(${V})`,_=($,D,V)=>{$!==D&&i.value.push({id:g($,D,V),source:$,target:D,type:"smoothstep"})},O=($,D,V)=>{i.value=i.value.filter(Y=>Y.id!==g($,D,V))},U=$=>{const D=n.value.find(V=>V.name===$);if(!D)throw Error(`Enum not found: ${$}`);return D},X=($,D)=>{const Y=U($).values.find(J=>J.name===D);if(!Y)throw Error(`EnumValue not found: ${D}`);return Y};return{nodes:o,edges:i,enums:n,createNode:a,createEdge:_,deleteNode:u,renameNode:c,addField:p,deleteField:b,updateField:h,addRelation:E,deleteRelation:N,updateRelation:M,projectSpec:e,isProjectNameConfirmed:t,setProjectName:$=>{e.value.project_name=$},getProjectName:()=>e.value.project_name,setDatabase:$=>{e.value.database=$},getDatabase:()=>e.value.database,findNodeById:l,findEnumByName:U,addEnum:$=>{const D={name:$,values:[]};return n.value.push(D),D},updateEnumName:($,D)=>{const V=U($);V.name=D,o.value.forEach(Y=>{Y.data.fields.forEach(J=>{J.type==="Enum"&&J.typeEnum===$&&(J.typeEnum=D)})})},deleteEnum:$=>{n.value=n.value.filter(D=>D.name!==$),o.value.forEach(D=>{D.data.fields=D.data.fields.filter(V=>V.typeEnum!==$)})},addEnumValue:($,D)=>{U($).values.push(D)},updateEnumValue:($,D,V)=>{const Y=X($,D);Y.name=V.name,Y.value=V.value,console.log($),console.log(V),o.value.forEach(J=>{J.data.fields.forEach(ue=>{ue.type==="Enum"&&ue.typeEnum===$&&(ue.defaultValue=V.name)})})},deleteEnumValue:($,D)=>{const V=U($);V.values=V.values.filter(Y=>Y.name!==D)},convertNodesToModel:s,callGenerateEndpoint:r}}),jt={boundedStr:/^.{1,100}$/,snakeCase:/^[a-z][a-z0-9_]*$/,pascalCase:/^[A-Z][a-z]*$/,variableStr:/^[a-zA-Z_][a-zA-Z0-9_-]*$/},Fg=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),Lc=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),aa=e=>jt.boundedStr.test(e)&&jt.pascalCase.test(e),Fc=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),vs=e=>jt.boundedStr.test(e)&&jt.snakeCase.test(e),Yt={modelName:"Use 1-100 characters. Start with a letter or underscore. Example: userModel_1",enumName:"Use PascalCase (start with uppercase). Example: UserStatus",enumValueName:"Use 1-100 characters. Start with a letter or underscore. Example: active_status",fieldName:"Use lowercase snake_case. Example: user_name"},zg={class:"container"},Hg={class:"input-group"},Ug={class:"input-horizontal"},Gg=["value","disabled"],jg=["disabled"],Yg={key:0,class:"error-message"},Kg=he({__name:"ProjectNameStep",setup(e){const t=_t(),n=te("asd"),o=te(!1),i=te(""),s=l=>{if(n.value=l.target.value,n.value.length===0){o.value=!1;return}Fg(n.value)?o.value=!1:(o.value=!0,i.value="Name must start with a letter/underscore and only contain letters, numbers, -, or _")},r=()=>{if(t.isProjectNameConfirmed){t.isProjectNameConfirmed=!1,t.setProjectName("");return}!n.value||o.value||(t.setProjectName(n.value),t.isProjectNameConfirmed=!0)};return ut(()=>{t.getProjectName()&&(n.value=t.getProjectName())}),(l,a)=>(z(),W("main",zg,[a[2]||(a[2]=x("h1",null,"Choose a Project Name",-1)),a[3]||(a[3]=x("br",null,null,-1)),x("div",Hg,[a[1]||(a[1]=x("div",{class:"label-group"},[x("label",{class:"project-name-label",for:"project-name"},"Project Name")],-1)),x("div",Ug,[x("input",{class:ze(["project-name",{confirmed:oe(t).isProjectNameConfirmed,"input-error":o.value}]),type:"text",placeholder:"Enter your project name",value:n.value,onInput:a[0]||(a[0]=u=>s(u)),disabled:oe(t).isProjectNameConfirmed,maxlength:"100"},null,42,Gg),x("button",{class:ze(["confirm-btn",{confirmed:oe(t).isProjectNameConfirmed}]),onClick:r,disabled:o.value||!n.value}," Confirm ",10,jg)]),o.value?(z(),W("div",Yg,Ae(i.value),1)):Ne("",!0)])]))}}),Xg=Xe(Kg,[["__scopeId","data-v-cad93208"]]),Wg={class:"container"},Zg={class:"db-grid-container"},qg={class:"db-grid"},Jg=["onClick"],Qg=he({__name:"DatabaseStep",setup(e){const t=_t(),n=["PostgreSQL","MySQL","SQLite"],o=i=>{i==="PostgreSQL"&&t.setDatabase(t.getDatabase()===i?"":i)};return ut(()=>{t.getDatabase()&&t.getDatabase()!=="PostgreSQL"&&t.setDatabase("")}),(i,s)=>(z(),W("main",Wg,[s[0]||(s[0]=x("h1",null,"Choose a Database",-1)),s[1]||(s[1]=x("br",null,null,-1)),x("div",Zg,[x("div",qg,[(z(),W(_e,null,Ye(n,r=>x("div",{class:ze(["db-item",{confirmed:oe(t).getDatabase()===r,disabled:r!=="PostgreSQL",enabled:r==="PostgreSQL"}]),key:r,onClick:l=>o(r)},[x("span",null,Ae(r),1)],10,Jg)),64))])])]))}}),ev=Xe(Qg,[["__scopeId","data-v-9256ee53"]]),tv={class:"custom-node"},nv={class:"custom-node-header"},ov={class:"custom-node-title"},iv={key:0,class:"dropdown-list"},sv={class:"custom-node-body nodrag"},rv=["onClick"],lv={class:"custom-node-field-name"},av={key:0,class:"custom-node-field-type"},uv={key:1,class:"custom-node-field-type"},cv=["onClick"],dv={class:"custom-node-field-name"},fv={class:"custom-node-field-type"},hv=he({__name:"CustomNode",props:{id:{},data:{}},setup(e){const t=e,n=te(!1),o=()=>{n.value=!0},i=()=>{n.value=!1};return(s,r)=>(z(),W("div",tv,[x("div",nv,[x("div",ov,Ae(s.id),1),x("div",{class:"custom-node-actions nodrag",onMouseover:o,onMouseleave:i},[r[4]||(r[4]=x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-ellipsis"},[x("circle",{cx:"12",cy:"12",r:"1"}),x("circle",{cx:"19",cy:"12",r:"1"}),x("circle",{cx:"5",cy:"12",r:"1"})],-1)),n.value?(z(),W("div",iv,[x("div",{class:"dropdown-item",onClick:r[0]||(r[0]=l=>s.$emit("add-field",t.id))},"Add Field"),x("div",{class:"dropdown-item",onClick:r[1]||(r[1]=l=>s.$emit("add-relation",t.id))},"Add Relation"),x("div",{class:"dropdown-item",onClick:r[2]||(r[2]=l=>s.$emit("rename-node",t.id))},"Rename"),x("div",{class:"dropdown-item",onClick:r[3]||(r[3]=l=>s.$emit("delete-node",t.id))},"Delete")])):Ne("",!0)],32)]),x("div",sv,[(z(!0),W(_e,null,Ye(s.data.fields,l=>(z(),W("div",{key:l.name,class:"custom-node-field-row",onClick:a=>s.$emit("open-edit-field-modal",t.id,l)},[x("div",lv,Ae(l.name),1),l.type!=="Enum"?(z(),W("div",av,Ae(l.type),1)):(z(),W("div",uv,Ae(l.type)+"("+Ae(l.typeEnum)+")",1))],8,rv))),128)),(z(!0),W(_e,null,Ye(s.data.relations,l=>(z(),W("div",{key:l.fieldName,class:"custom-node-field-row",onClick:a=>s.$emit("open-edit-relation-modal",t.id,l)},[x("div",dv,Ae(l.fieldName),1),x("div",fv,Ae(l.targetModel),1)],8,cv))),128))])]))}}),pv=Xe(hv,[["__scopeId","data-v-b7467be7"]]),Wt=yc("modal",()=>{const e=te(!1),t=te(""),n=zo(null),o=te({});function i(r,l,a={}){n.value=an(l),o.value=a,t.value=r,e.value=!0}function s(){e.value=!1,n.value=null,o.value={},t.value=""}return{isOpen:e,modalTitle:t,currentComponent:n,props:o,open:i,close:s}}),gv=kg(),Kt=e=>{gv.error(e,{toastClassName:"container-class"})},vv={class:"field-modal-container"},mv={class:"input-container"},yv={class:"input-group"},_v={class:"input-group"},bv=["disabled"],wv={key:0,class:"input-group"},xv=["value"],Ev={class:"input-group"},Sv=["disabled"],Cv=["value"],Nv=["disabled"],Tv={class:"checkbox-group"},Mv={key:0,class:"checkbox-group"},$v=he({__name:"AddFieldModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(),s=te(""),r=te(""),l=te(""),a=te(!1),u=te(!1),c=te(!1),d=te(!1),p=te(null),h=te({}),b=te(!1),E=te(!1);xe(a,P=>{P&&(r.value="UUID",l.value="uuid.uuid4")});const N=()=>{l.value==="datetime.now(timezone.utc)"&&(l.value=""),h.value={}};xe(b,P=>{P?(E.value=!1,l.value="datetime.now(timezone.utc)",h.value={}):E.value||N()}),xe(E,P=>{P?(b.value=!1,l.value="datetime.now(timezone.utc)",h.value={onupdate:"datetime.now(timezone.utc)"}):b.value||N()}),xe(r,P=>{P!=="DateTime"&&(b.value||E.value)&&(N(),b.value=!1,E.value=!1)});const M=()=>{if(!(!s.value||!r.value)){if(!vs(s.value)){Kt(Yt.fieldName);return}n.addField(t.id,{name:s.value,type:r.value,typeEnum:i.value?.name,isPrimaryKey:a.value,isNullable:u.value,isUnique:c.value,isIndex:d.value,defaultValue:l.value||void 0,metadata:p.value||void 0}),o.close()}};return(P,g)=>(z(),W("main",vv,[x("div",mv,[x("div",yv,[g[11]||(g[11]=x("label",{class:"field-label"},"Field name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":g[0]||(g[0]=_=>s.value=_),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",_v,[g[13]||(g[13]=x("label",{class:"field-label"},"Type",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[1]||(g[1]=_=>r.value=_),disabled:a.value},g[12]||(g[12]=[Wr('-- Select type --StringIntUUIDDateTimeBooleanFloatEnum',8)]),8,bv),[[Ft,r.value]])]),r.value==="Enum"?(z(),W("div",wv,[g[15]||(g[15]=x("label",{class:"field-label"},"Select Enum",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[2]||(g[2]=_=>i.value=_)},[g[14]||(g[14]=x("option",{disabled:"",value:""},"-- Select Enum --",-1)),(z(!0),W(_e,null,Ye(oe(n).enums,_=>(z(),W("option",{key:_.name,value:_},Ae(_.name),9,xv))),128))],512),[[Ft,i.value]])])):Ne("",!0),x("div",Ev,[g[17]||(g[17]=x("label",{class:"field-label"},"Default value",-1)),r.value==="Enum"?ye((z(),W("select",{key:0,class:"field-select","onUpdate:modelValue":g[3]||(g[3]=_=>l.value=_),disabled:a.value},[g[16]||(g[16]=x("option",{value:""},null,-1)),(z(!0),W(_e,null,Ye(i.value?.values,_=>(z(),W("option",{key:_.name,value:_.name},Ae(_.name),9,Cv))),128))],8,Sv)),[[Ft,l.value]]):ye((z(),W("input",{key:1,class:"field-input","onUpdate:modelValue":g[4]||(g[4]=_=>l.value=_),type:"text",maxlength:"100",disabled:a.value||b.value||E.value},null,8,Nv)),[[tt,l.value]])])]),x("div",Tv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[5]||(g[5]=_=>a.value=_)},null,512),[[Ke,a.value]]),g[18]||(g[18]=Be(" Primary key",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[6]||(g[6]=_=>u.value=_)},null,512),[[Ke,u.value]]),g[19]||(g[19]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[7]||(g[7]=_=>c.value=_)},null,512),[[Ke,c.value]]),g[20]||(g[20]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[8]||(g[8]=_=>d.value=_)},null,512),[[Ke,d.value]]),g[21]||(g[21]=Be(" Index",-1))])]),r.value==="DateTime"?(z(),W("div",Mv,[g[24]||(g[24]=x("label",{class:"field-label"},"Timestamp",-1)),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[9]||(g[9]=_=>b.value=_)},null,512),[[Ke,b.value]]),g[22]||(g[22]=Be(" Created",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[10]||(g[10]=_=>E.value=_)},null,512),[[Ke,E.value]]),g[23]||(g[23]=Be(" Updated",-1))])])):Ne("",!0),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:M},"Save")])]))}}),Iv=Xe($v,[["__scopeId","data-v-957caa91"]]),kv={class:"field-modal-container"},Pv={class:"input-container"},Av={class:"input-group"},Dv={class:"input-group"},Ov=["disabled"],Rv={key:0,class:"input-group"},Vv=["value"],Bv={class:"input-group"},Lv=["disabled"],Fv=["value"],zv=["disabled"],Hv={class:"checkbox-group"},Uv={key:0,class:"checkbox-group"},Gv=he({__name:"EditFieldModal",props:{id:{},field:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(),s=te(t.field.name),r=te(t.field.type),l=te(t.field.defaultValue||""),a=te(t.field.isPrimaryKey||!1),u=te(t.field.isNullable||!1),c=te(t.field.isUnique||!1),d=te(t.field.isIndex||!1),p=te(t.field.extraKwargs||{}),h=te(t.field.metadata?.isCreatedAtTimestamp||!1),b=te(t.field.metadata?.isUpdatedAtTimestamp||!1);ut(()=>{t.field.type==="Enum"&&t.field.typeEnum&&(i.value=n.findEnumByName(t.field.typeEnum)),t.field.type==="DateTime"&&console.log(h.value)}),xe(a,P=>{P&&(r.value="UUID",l.value="uuid.uuid4")});const E=()=>{l.value="",p.value={}};xe(h,P=>{P?(b.value=!1,l.value="datetime.now(timezone.utc)",p.value={}):b.value||E()}),xe(b,P=>{P?(h.value=!1,l.value="datetime.now(timezone.utc)",p.value={onupdate:"datetime.now(timezone.utc)"}):h.value||E()}),xe(r,P=>{console.log(r.value,P),P!=="DateTime"&&(h.value||b.value)&&(E(),h.value=!1,b.value=!1)});const N=()=>{if(!vs(s.value)){Kt(Yt.fieldName);return}n.updateField(t.id,t.field.name,{name:s.value,type:r.value,typeEnum:i.value?.name,defaultValue:l.value||void 0,isPrimaryKey:a.value,isNullable:u.value,isUnique:c.value,isIndex:d.value,metadata:{isCreatedAtTimestamp:h.value,isUpdatedAtTimestamp:b.value},extraKwargs:Object.keys(p.value).length?p.value:void 0}),o.close()},M=()=>{n.deleteField(t.id,t.field.name),o.close()};return(P,g)=>(z(),W("main",kv,[x("div",Pv,[x("div",Av,[g[11]||(g[11]=x("label",{class:"field-label"},"Field name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":g[0]||(g[0]=_=>s.value=_),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",Dv,[g[13]||(g[13]=x("label",{class:"field-label"},"Type",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[1]||(g[1]=_=>r.value=_),disabled:a.value},g[12]||(g[12]=[Wr('-- Select type --StringIntUUIDDateTimeBooleanFloatEnum',8)]),8,Ov),[[Ft,r.value]])]),r.value==="Enum"?(z(),W("div",Rv,[g[15]||(g[15]=x("label",{class:"field-label"},"Select Enum",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[2]||(g[2]=_=>i.value=_)},[g[14]||(g[14]=x("option",{disabled:"",value:""},"-- Select Enum --",-1)),(z(!0),W(_e,null,Ye(oe(n).enums,_=>(z(),W("option",{key:_.name,value:_},Ae(_.name),9,Vv))),128))],512),[[Ft,i.value]])])):Ne("",!0),x("div",Bv,[g[17]||(g[17]=x("label",{class:"field-label"},"Default value",-1)),r.value==="Enum"?ye((z(),W("select",{key:0,class:"field-select","onUpdate:modelValue":g[3]||(g[3]=_=>l.value=_),disabled:a.value},[g[16]||(g[16]=x("option",{value:""},null,-1)),(z(!0),W(_e,null,Ye(i.value?.values,_=>(z(),W("option",{key:_.name,value:_.name},Ae(_.name),9,Fv))),128))],8,Lv)),[[Ft,l.value]]):ye((z(),W("input",{key:1,class:"field-input","onUpdate:modelValue":g[4]||(g[4]=_=>l.value=_),type:"text",maxlength:"100",disabled:a.value||h.value||b.value},null,8,zv)),[[tt,l.value]])])]),x("div",Hv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[5]||(g[5]=_=>a.value=_)},null,512),[[Ke,a.value]]),g[18]||(g[18]=Be(" Primary key",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[6]||(g[6]=_=>u.value=_)},null,512),[[Ke,u.value]]),g[19]||(g[19]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[7]||(g[7]=_=>c.value=_)},null,512),[[Ke,c.value]]),g[20]||(g[20]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[8]||(g[8]=_=>d.value=_)},null,512),[[Ke,d.value]]),g[21]||(g[21]=Be(" Index",-1))])]),r.value==="DateTime"?(z(),W("div",Uv,[g[24]||(g[24]=x("label",{class:"field-label"},"Timestamp",-1)),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[9]||(g[9]=_=>h.value=_)},null,512),[[Ke,h.value]]),g[22]||(g[22]=Be(" Created",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[10]||(g[10]=_=>b.value=_)},null,512),[[Ke,b.value]]),g[23]||(g[23]=Be(" Updated",-1))])])):Ne("",!0),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:N},"Save"),x("button",{class:"delete-field-btn",onClick:M},"Delete")])]))}}),jv=Xe(Gv,[["__scopeId","data-v-d1c2c65c"]]),Yv={class:"relation-container"},Kv={class:"input-container"},Xv={class:"input-group"},Wv={class:"input-group"},Zv=["value"],qv={class:"input-group"},Jv={class:"input-group"},Qv={class:"checkbox-group"},em=he({__name:"EditRelationModal",props:{id:{},relation:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te(""),r=te(""),l=te(""),a=te(""),u=te(!1),c=te(!1),d=te(!1);ut(()=>{i.value=t.relation.fieldName||"",s.value=t.relation.fieldName||"",r.value=t.relation.targetModel||"",l.value=t.relation.onDelete||"",a.value=t.relation.backPopulates||"",u.value=t.relation.isNullable||!1,c.value=t.relation.isUnique||!1,d.value=t.relation.isIndex||!1});const p=pe(()=>n.nodes.filter(E=>E.id!==t.id)),h=()=>{if(!(!r.value||!s.value)){if(!vs(s.value)){Kt(Yt.fieldName);return}n.updateRelation(t.id,t.relation.targetModel,t.relation.fieldName,{fieldName:s.value,targetModel:r.value,backPopulates:a.value,onDelete:l.value,isNullable:u.value,isUnique:c.value,isIndex:d.value}),o.close()}},b=()=>{n.deleteRelation(t.id,t.relation.targetModel,t.relation.fieldName),o.close()};return(E,N)=>(z(),W("main",Yv,[x("div",Kv,[x("div",Xv,[N[7]||(N[7]=x("label",{class:"relation-label"},"Field name",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":N[0]||(N[0]=M=>s.value=M),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",Wv,[N[9]||(N[9]=x("label",{class:"relation-label"},"Target model",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":N[1]||(N[1]=M=>r.value=M)},[N[8]||(N[8]=x("option",{disabled:"",value:""},"-- Select a model --",-1)),(z(!0),W(_e,null,Ye(p.value,M=>(z(),W("option",{key:M.id,value:M.id},Ae(M.id),9,Zv))),128))],512),[[Ft,r.value]])]),x("div",qv,[N[11]||(N[11]=x("label",{class:"relation-label"},"OnDelete",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":N[2]||(N[2]=M=>l.value=M)},N[10]||(N[10]=[x("option",{disabled:"",value:""},"-- Select behavior --",-1),x("option",{value:"CASCADE"},"CASCADE",-1),x("option",{value:"SET_NULL"},"SET_NULL",-1)]),512),[[Ft,l.value]])]),x("div",Jv,[N[12]||(N[12]=x("label",{class:"relation-label"},"Back populates",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":N[3]||(N[3]=M=>a.value=M),type:"text"},null,512),[[tt,a.value]])])]),x("div",Qv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[4]||(N[4]=M=>u.value=M)},null,512),[[Ke,u.value]]),N[13]||(N[13]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[5]||(N[5]=M=>c.value=M)},null,512),[[Ke,c.value]]),N[14]||(N[14]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[6]||(N[6]=M=>d.value=M)},null,512),[[Ke,d.value]]),N[15]||(N[15]=Be(" Index",-1))])]),x("div",{class:"action-group"},[x("button",{class:"delete-relation-btn",onClick:b},"Delete"),x("button",{class:"save-relation-btn",onClick:h},"Save")])]))}}),tm=Xe(em,[["__scopeId","data-v-de485ddf"]]),nm={class:"relation-container"},om={class:"input-container"},im={class:"input-group"},sm={class:"input-group"},rm=["value"],lm={class:"input-group"},am={class:"input-group"},um={class:"checkbox-group"},cm=he({__name:"AddRelationModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te(""),r=te(""),l=te(""),a=te(!1),u=te(!1),c=te(!1),d=pe(()=>n.nodes.filter(h=>h.id!==t.id)),p=()=>{if(!(!s.value||!i.value)){if(!vs(i.value)){Kt(Yt.fieldName);return}n.addRelation(t.id,s.value,{fieldName:i.value,targetModel:s.value,backPopulates:l.value,onDelete:r.value,isNullable:a.value,isUnique:u.value,isIndex:c.value}),o.close()}};return(h,b)=>(z(),W("main",nm,[x("div",om,[x("div",im,[b[7]||(b[7]=x("label",{class:"relation-label"},"Field name",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":b[0]||(b[0]=E=>i.value=E),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",sm,[b[9]||(b[9]=x("label",{class:"relation-label"},"Target model",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":b[1]||(b[1]=E=>s.value=E)},[b[8]||(b[8]=x("option",{disabled:"",value:""},"-- Select a model --",-1)),(z(!0),W(_e,null,Ye(d.value,E=>(z(),W("option",{key:E.id,value:E.id},Ae(E.id),9,rm))),128))],512),[[Ft,s.value]])]),x("div",lm,[b[11]||(b[11]=x("label",{class:"relation-label"},"OnDelete",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":b[2]||(b[2]=E=>r.value=E)},b[10]||(b[10]=[x("option",{disabled:"",value:""},"-- Select behavior --",-1),x("option",{value:"CASCADE"},"CASCADE",-1),x("option",{value:"SET_NULL"},"SET_NULL",-1)]),512),[[Ft,r.value]])]),x("div",am,[b[12]||(b[12]=x("label",{class:"relation-label"},"Back populates",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":b[3]||(b[3]=E=>l.value=E),type:"text",maxlength:"100"},null,512),[[tt,l.value]])])]),x("div",um,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[4]||(b[4]=E=>a.value=E)},null,512),[[Ke,a.value]]),b[13]||(b[13]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[5]||(b[5]=E=>u.value=E)},null,512),[[Ke,u.value]]),b[14]||(b[14]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[6]||(b[6]=E=>c.value=E)},null,512),[[Ke,c.value]]),b[15]||(b[15]=Be(" Index",-1))])]),x("div",{class:"action-group"},[x("button",{class:"save-relation-btn",onClick:p},"Save")])]))}}),dm=Xe(cm,[["__scopeId","data-v-074cc5ca"]]),fm={class:"rename-node-modal"},hm={class:"input-container"},pm={class:"input-group"},gm=he({__name:"RenameNodeModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(t.id),s=()=>{const r=i.value.trim();if(!Lc(r)){Kt(Yt.modelName);return}if(!r||i.value===t.id){o.close();return}n.renameNode(t.id,r),o.close()};return(r,l)=>(z(),W("main",fm,[x("div",hm,[x("div",pm,[l[1]||(l[1]=x("label",{class:"field-label"},"New model name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":l[0]||(l[0]=a=>i.value=a),type:"text",maxlength:"100"},null,512),[[tt,i.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-btn",onClick:s},"Rename")])]))}}),vm=Xe(gm,[["__scopeId","data-v-7350b5ff"]]);function ms(e){return is()?(To(e),!0):!1}function nn(e){return typeof e=="function"?e():oe(e)}const mm=typeof window<"u"&&typeof document<"u",ym=e=>typeof e<"u",_m=Object.prototype.toString,bm=e=>_m.call(e)==="[object Object]",wm=()=>{};function xm(e,t){function n(...o){return new Promise((i,s)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(i).catch(s)})}return n}const zc=e=>e();function Em(e=zc){const t=te(!0);function n(){t.value=!1}function o(){t.value=!0}const i=(...s)=>{t.value&&e(...s)};return{isActive:zr(t),pause:n,resume:o,eventFilter:i}}function ua(e,t=!1,n="Timeout"){return new Promise((o,i)=>{setTimeout(t?()=>i(n):o,e)})}function Sm(e,t,n={}){const{eventFilter:o=zc,...i}=n;return xe(e,xm(o,t),i)}function Zn(e,t,n={}){const{eventFilter:o,...i}=n,{eventFilter:s,pause:r,resume:l,isActive:a}=Em(o);return{stop:Sm(e,t,{...i,eventFilter:s}),pause:r,resume:l,isActive:a}}function Cm(e,t={}){if(!Oe(e))return _u(e);const n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(const o in e.value)n[o]=If(()=>({get(){return e.value[o]},set(i){var s;if((s=nn(t.replaceRef))!=null?s:!0)if(Array.isArray(e.value)){const l=[...e.value];l[o]=i,e.value=l}else{const l={...e.value,[o]:i};Object.setPrototypeOf(l,Object.getPrototypeOf(e.value)),e.value=l}else e.value[o]=i}}));return n}function vr(e,t=!1){function n(d,{flush:p="sync",deep:h=!1,timeout:b,throwOnTimeout:E}={}){let N=null;const P=[new Promise(g=>{N=xe(e,_=>{d(_)!==t&&(N?.(),g(_))},{flush:p,deep:h,immediate:!0})})];return b!=null&&P.push(ua(b,E).then(()=>nn(e)).finally(()=>N?.())),Promise.race(P)}function o(d,p){if(!Oe(d))return n(_=>_===d,p);const{flush:h="sync",deep:b=!1,timeout:E,throwOnTimeout:N}=p??{};let M=null;const g=[new Promise(_=>{M=xe([e,d],([O,U])=>{t!==(O===U)&&(M?.(),_(O))},{flush:h,deep:b,immediate:!0})})];return E!=null&&g.push(ua(E,N).then(()=>nn(e)).finally(()=>(M?.(),nn(e)))),Promise.race(g)}function i(d){return n(p=>!!p,d)}function s(d){return o(null,d)}function r(d){return o(void 0,d)}function l(d){return n(Number.isNaN,d)}function a(d,p){return n(h=>{const b=Array.from(h);return b.includes(d)||b.includes(nn(d))},p)}function u(d){return c(1,d)}function c(d=1,p){let h=-1;return n(()=>(h+=1,h>=d),p)}return Array.isArray(nn(e))?{toMatch:n,toContains:a,changed:u,changedTimes:c,get not(){return vr(e,!t)}}:{toMatch:n,toBe:o,toBeTruthy:i,toBeNull:s,toBeNaN:l,toBeUndefined:r,changed:u,changedTimes:c,get not(){return vr(e,!t)}}}function mr(e){return vr(e)}function Nm(e){var t;const n=nn(e);return(t=n?.$el)!=null?t:n}const Hc=mm?window:void 0;function Uc(...e){let t,n,o,i;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,o,i]=e,t=Hc):[t,n,o,i]=e,!t)return wm;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const s=[],r=()=>{s.forEach(c=>c()),s.length=0},l=(c,d,p,h)=>(c.addEventListener(d,p,h),()=>c.removeEventListener(d,p,h)),a=xe(()=>[Nm(t),nn(i)],([c,d])=>{if(r(),!c)return;const p=bm(d)?{...d}:d;s.push(...n.flatMap(h=>o.map(b=>l(c,h,b,p))))},{immediate:!0,flush:"post"}),u=()=>{a(),r()};return ms(u),u}function Tm(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function ca(...e){let t,n,o={};e.length===3?(t=e[0],n=e[1],o=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],o=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:i=Hc,eventName:s="keydown",passive:r=!1,dedupe:l=!1}=o,a=Tm(t);return Uc(i,s,c=>{c.repeat&&nn(l)||a(c)&&n(c)},r)}function Mm(e){return JSON.parse(JSON.stringify(e))}function zs(e,t,n,o={}){var i,s,r;const{clone:l=!1,passive:a=!1,eventName:u,deep:c=!1,defaultValue:d,shouldEmit:p}=o,h=Xt(),b=n||h?.emit||((i=h?.$emit)==null?void 0:i.bind(h))||((r=(s=h?.proxy)==null?void 0:s.$emit)==null?void 0:r.bind(h?.proxy));let E=u;t||(t="modelValue"),E=E||`update:${t.toString()}`;const N=g=>l?typeof l=="function"?l(g):Mm(g):g,M=()=>ym(e[t])?N(e[t]):d,P=g=>{p?p(g)&&b(E,g):b(E,g)};if(a){const g=M(),_=te(g);let O=!1;return xe(()=>e[t],U=>{O||(O=!0,_.value=N(U),ht(()=>O=!1))}),xe(_,U=>{!O&&(U!==e[t]||c)&&P(U)},{deep:c}),_}else return pe({get(){return M()},set(g){P(g)}})}var $m={value:()=>{}};function ys(){for(var e=0,t=arguments.length,n={},o;e=0&&(o=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:o}})}Mi.prototype=ys.prototype={constructor:Mi,on:function(e,t){var n=this._,o=Im(e+"",n),i,s=-1,r=o.length;if(arguments.length<2){for(;++s0)for(var n=new Array(i),o=0,i,s;o=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),fa.hasOwnProperty(t)?{space:fa[t],local:e}:e}function Pm(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===yr&&t.documentElement.namespaceURI===yr?t.createElement(e):t.createElementNS(n,e)}}function Am(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Gc(e){var t=_s(e);return(t.local?Am:Pm)(t)}function Dm(){}function Jr(e){return e==null?Dm:function(){return this.querySelector(e)}}function Om(e){typeof e!="function"&&(e=Jr(e));for(var t=this._groups,n=t.length,o=new Array(n),i=0;i=g&&(g=P+1);!(O=N[g])&&++g=0;)(r=o[i])&&(s&&r.compareDocumentPosition(s)^4&&s.parentNode.insertBefore(r,s),s=r);return this}function r1(e){e||(e=l1);function t(d,p){return d&&p?e(d.__data__,p.__data__):!d-!p}for(var n=this._groups,o=n.length,i=new Array(o),s=0;st?1:e>=t?0:NaN}function a1(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function u1(){return Array.from(this)}function c1(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?w1:typeof t=="function"?E1:x1)(e,t,n??"")):uo(this.node(),e)}function uo(e,t){return e.style.getPropertyValue(t)||Wc(e).getComputedStyle(e,null).getPropertyValue(t)}function C1(e){return function(){delete this[e]}}function N1(e,t){return function(){this[e]=t}}function T1(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function M1(e,t){return arguments.length>1?this.each((t==null?C1:typeof t=="function"?T1:N1)(e,t)):this.node()[e]}function Zc(e){return e.trim().split(/^|\s+/)}function Qr(e){return e.classList||new qc(e)}function qc(e){this._node=e,this._names=Zc(e.getAttribute("class")||"")}qc.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function Jc(e,t){for(var n=Qr(e),o=-1,i=t.length;++o=0&&(n=t.slice(o+1),t=t.slice(0,o)),{type:t,name:n}})}function n0(e){return function(){var t=this.__on;if(t){for(var n=0,o=-1,i=t.length,s;n()=>e;function _r(e,{sourceEvent:t,subject:n,target:o,identifier:i,active:s,x:r,y:l,dx:a,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:o,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:s,enumerable:!0,configurable:!0},x:{value:r,enumerable:!0,configurable:!0},y:{value:l,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}_r.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function f0(e){return!e.ctrlKey&&!e.button}function h0(){return this.parentNode}function p0(e,t){return t??{x:e.x,y:e.y}}function g0(){return navigator.maxTouchPoints||"ontouchstart"in this}function v0(){var e=f0,t=h0,n=p0,o=g0,i={},s=ys("start","drag","end"),r=0,l,a,u,c,d=0;function p(_){_.on("mousedown.drag",h).filter(o).on("touchstart.drag",N).on("touchmove.drag",M,d0).on("touchend.drag touchcancel.drag",P).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(_,O){if(!(c||!e.call(this,_,O))){var U=g(this,t.call(this,_,O),_,O,"mouse");U&&(wt(_.view).on("mousemove.drag",b,Wo).on("mouseup.drag",E,Wo),nd(_.view),Hs(_),u=!1,l=_.clientX,a=_.clientY,U("start",_))}}function b(_){if(oo(_),!u){var O=_.clientX-l,U=_.clientY-a;u=O*O+U*U>d}i.mouse("drag",_)}function E(_){wt(_.view).on("mousemove.drag mouseup.drag",null),od(_.view,u),oo(_),i.mouse("end",_)}function N(_,O){if(e.call(this,_,O)){var U=_.changedTouches,X=t.call(this,_,O),H=U.length,F,Z;for(F=0;F>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?pi(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?pi(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=y0.exec(e))?new lt(t[1],t[2],t[3],1):(t=_0.exec(e))?new lt(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=b0.exec(e))?pi(t[1],t[2],t[3],t[4]):(t=w0.exec(e))?pi(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=x0.exec(e))?_a(t[1],t[2]/100,t[3]/100,1):(t=E0.exec(e))?_a(t[1],t[2]/100,t[3]/100,t[4]):ha.hasOwnProperty(e)?va(ha[e]):e==="transparent"?new lt(NaN,NaN,NaN,0):null}function va(e){return new lt(e>>16&255,e>>8&255,e&255,1)}function pi(e,t,n,o){return o<=0&&(e=t=n=NaN),new lt(e,t,n,o)}function N0(e){return e instanceof li||(e=Gn(e)),e?(e=e.rgb(),new lt(e.r,e.g,e.b,e.opacity)):new lt}function br(e,t,n,o){return arguments.length===1?N0(e):new lt(e,t,n,o??1)}function lt(e,t,n,o){this.r=+e,this.g=+t,this.b=+n,this.opacity=+o}el(lt,br,id(li,{brighter(e){return e=e==null?Ui:Math.pow(Ui,e),new lt(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Zo:Math.pow(Zo,e),new lt(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new lt(Fn(this.r),Fn(this.g),Fn(this.b),Gi(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ma,formatHex:ma,formatHex8:T0,formatRgb:ya,toString:ya}));function ma(){return`#${Rn(this.r)}${Rn(this.g)}${Rn(this.b)}`}function T0(){return`#${Rn(this.r)}${Rn(this.g)}${Rn(this.b)}${Rn((isNaN(this.opacity)?1:this.opacity)*255)}`}function ya(){const e=Gi(this.opacity);return`${e===1?"rgb(":"rgba("}${Fn(this.r)}, ${Fn(this.g)}, ${Fn(this.b)}${e===1?")":`, ${e})`}`}function Gi(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Fn(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Rn(e){return e=Fn(e),(e<16?"0":"")+e.toString(16)}function _a(e,t,n,o){return o<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new xt(e,t,n,o)}function sd(e){if(e instanceof xt)return new xt(e.h,e.s,e.l,e.opacity);if(e instanceof li||(e=Gn(e)),!e)return new xt;if(e instanceof xt)return e;e=e.rgb();var t=e.r/255,n=e.g/255,o=e.b/255,i=Math.min(t,n,o),s=Math.max(t,n,o),r=NaN,l=s-i,a=(s+i)/2;return l?(t===s?r=(n-o)/l+(n0&&a<1?0:r,new xt(r,l,a,e.opacity)}function M0(e,t,n,o){return arguments.length===1?sd(e):new xt(e,t,n,o??1)}function xt(e,t,n,o){this.h=+e,this.s=+t,this.l=+n,this.opacity=+o}el(xt,M0,id(li,{brighter(e){return e=e==null?Ui:Math.pow(Ui,e),new xt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Zo:Math.pow(Zo,e),new xt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,o=n+(n<.5?n:1-n)*t,i=2*n-o;return new lt(Us(e>=240?e-240:e+120,i,o),Us(e,i,o),Us(e<120?e+240:e-120,i,o),this.opacity)},clamp(){return new xt(ba(this.h),gi(this.s),gi(this.l),Gi(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Gi(this.opacity);return`${e===1?"hsl(":"hsla("}${ba(this.h)}, ${gi(this.s)*100}%, ${gi(this.l)*100}%${e===1?")":`, ${e})`}`}}));function ba(e){return e=(e||0)%360,e<0?e+360:e}function gi(e){return Math.max(0,Math.min(1,e||0))}function Us(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const tl=e=>()=>e;function $0(e,t){return function(n){return e+n*t}}function I0(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(o){return Math.pow(e+o*t,n)}}function k0(e){return(e=+e)==1?rd:function(t,n){return n-t?I0(t,n,e):tl(isNaN(t)?n:t)}}function rd(e,t){var n=t-e;return n?$0(e,n):tl(isNaN(e)?t:e)}const ji=function e(t){var n=k0(t);function o(i,s){var r=n((i=br(i)).r,(s=br(s)).r),l=n(i.g,s.g),a=n(i.b,s.b),u=rd(i.opacity,s.opacity);return function(c){return i.r=r(c),i.g=l(c),i.b=a(c),i.opacity=u(c),i+""}}return o.gamma=e,o}(1);function P0(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,o=t.slice(),i;return function(s){for(i=0;in&&(s=t.slice(n,s),l[r]?l[r]+=s:l[++r]=s),(o=o[0])===(i=i[0])?l[r]?l[r]+=i:l[++r]=i:(l[++r]=null,a.push({i:r,x:Vt(o,i)})),n=Gs.lastIndex;return n180?c+=360:c-u>180&&(u+=360),p.push({i:d.push(i(d)+"rotate(",null,o)-2,x:Vt(u,c)})):c&&d.push(i(d)+"rotate("+c+o)}function l(u,c,d,p){u!==c?p.push({i:d.push(i(d)+"skewX(",null,o)-2,x:Vt(u,c)}):c&&d.push(i(d)+"skewX("+c+o)}function a(u,c,d,p,h,b){if(u!==d||c!==p){var E=h.push(i(h)+"scale(",null,",",null,")");b.push({i:E-4,x:Vt(u,d)},{i:E-2,x:Vt(c,p)})}else(d!==1||p!==1)&&h.push(i(h)+"scale("+d+","+p+")")}return function(u,c){var d=[],p=[];return u=e(u),c=e(c),s(u.translateX,u.translateY,c.translateX,c.translateY,d,p),r(u.rotate,c.rotate,d,p),l(u.skewX,c.skewX,d,p),a(u.scaleX,u.scaleY,c.scaleX,c.scaleY,d,p),u=c=null,function(h){for(var b=-1,E=p.length,N;++b=0&&e._call.call(void 0,t),e=e._next;--co}function Ea(){jn=(Ki=Jo.now())+bs,co=Eo=0;try{K0()}finally{co=0,W0(),jn=0}}function X0(){var e=Jo.now(),t=e-Ki;t>cd&&(bs-=t,Ki=e)}function W0(){for(var e,t=Yi,n,o=1/0;t;)t._call?(o>t._time&&(o=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Yi=n);So=e,Er(o)}function Er(e){if(!co){Eo&&(Eo=clearTimeout(Eo));var t=e-jn;t>24?(e<1/0&&(Eo=setTimeout(Ea,e-Jo.now()-bs)),bo&&(bo=clearInterval(bo))):(bo||(Ki=Jo.now(),bo=setInterval(X0,cd)),co=1,dd(Ea))}}function Sa(e,t,n){var o=new Xi;return t=t==null?0:+t,o.restart(i=>{o.stop(),e(i+t)},t,n),o}var Z0=ys("start","end","cancel","interrupt"),q0=[],hd=0,Ca=1,Sr=2,Ii=3,Na=4,Cr=5,ki=6;function ws(e,t,n,o,i,s){var r=e.__transition;if(!r)e.__transition={};else if(n in r)return;J0(e,n,{name:t,index:o,group:i,on:Z0,tween:q0,time:s.time,delay:s.delay,duration:s.duration,ease:s.ease,timer:null,state:hd})}function ol(e,t){var n=Mt(e,t);if(n.state>hd)throw new Error("too late; already scheduled");return n}function Zt(e,t){var n=Mt(e,t);if(n.state>Ii)throw new Error("too late; already running");return n}function Mt(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function J0(e,t,n){var o=e.__transition,i;o[t]=n,n.timer=fd(s,0,n.time);function s(u){n.state=Ca,n.timer.restart(r,n.delay,n.time),n.delay<=u&&r(u-n.delay)}function r(u){var c,d,p,h;if(n.state!==Ca)return a();for(c in o)if(h=o[c],h.name===n.name){if(h.state===Ii)return Sa(r);h.state===Na?(h.state=ki,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete o[c]):+cSr&&o.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function My(e,t,n){var o,i,s=Ty(t)?ol:Zt;return function(){var r=s(this,e),l=r.on;l!==o&&(i=(o=l).copy()).on(t,n),r.on=i}}function $y(e,t){var n=this._id;return arguments.length<2?Mt(this.node(),n).on.on(e):this.each(My(n,e,t))}function Iy(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function ky(){return this.on("end.remove",Iy(this._id))}function Py(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Jr(e));for(var o=this._groups,i=o.length,s=new Array(i),r=0;r()=>e;function o2(e,{sourceEvent:t,target:n,transform:o,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:o,enumerable:!0,configurable:!0},_:{value:i}})}function on(e,t,n){this.k=e,this.x=t,this.y=n}on.prototype={constructor:on,scale:function(e){return e===1?this:new on(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new on(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var fo=new on(1,0,0);on.prototype;function js(e){e.stopImmediatePropagation()}function wo(e){e.preventDefault(),e.stopImmediatePropagation()}function i2(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function s2(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Ta(){return this.__zoom||fo}function r2(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function l2(){return navigator.maxTouchPoints||"ontouchstart"in this}function a2(e,t,n){var o=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],s=e.invertY(t[0][1])-n[0][1],r=e.invertY(t[1][1])-n[1][1];return e.translate(i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i),r>s?(s+r)/2:Math.min(0,s)||Math.max(0,r))}function u2(){var e=i2,t=s2,n=a2,o=r2,i=l2,s=[0,1/0],r=[[-1/0,-1/0],[1/0,1/0]],l=250,a=$i,u=ys("start","zoom","end"),c,d,p,h=500,b=150,E=0,N=10;function M(T){T.property("__zoom",Ta).on("wheel.zoom",H,{passive:!1}).on("mousedown.zoom",F).on("dblclick.zoom",Z).filter(i).on("touchstart.zoom",j).on("touchmove.zoom",C).on("touchend.zoom touchcancel.zoom",ee).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}M.transform=function(T,G,k,L){var $=T.selection?T.selection():T;$.property("__zoom",Ta),T!==$?O(T,G,k,L):$.interrupt().each(function(){U(this,arguments).event(L).start().zoom(null,typeof G=="function"?G.apply(this,arguments):G).end()})},M.scaleBy=function(T,G,k,L){M.scaleTo(T,function(){var $=this.__zoom.k,D=typeof G=="function"?G.apply(this,arguments):G;return $*D},k,L)},M.scaleTo=function(T,G,k,L){M.transform(T,function(){var $=t.apply(this,arguments),D=this.__zoom,V=k==null?_($):typeof k=="function"?k.apply(this,arguments):k,Y=D.invert(V),J=typeof G=="function"?G.apply(this,arguments):G;return n(g(P(D,J),V,Y),$,r)},k,L)},M.translateBy=function(T,G,k,L){M.transform(T,function(){return n(this.__zoom.translate(typeof G=="function"?G.apply(this,arguments):G,typeof k=="function"?k.apply(this,arguments):k),t.apply(this,arguments),r)},null,L)},M.translateTo=function(T,G,k,L,$){M.transform(T,function(){var D=t.apply(this,arguments),V=this.__zoom,Y=L==null?_(D):typeof L=="function"?L.apply(this,arguments):L;return n(fo.translate(Y[0],Y[1]).scale(V.k).translate(typeof G=="function"?-G.apply(this,arguments):-G,typeof k=="function"?-k.apply(this,arguments):-k),D,r)},L,$)};function P(T,G){return G=Math.max(s[0],Math.min(s[1],G)),G===T.k?T:new on(G,T.x,T.y)}function g(T,G,k){var L=G[0]-k[0]*T.k,$=G[1]-k[1]*T.k;return L===T.x&&$===T.y?T:new on(T.k,L,$)}function _(T){return[(+T[0][0]+ +T[1][0])/2,(+T[0][1]+ +T[1][1])/2]}function O(T,G,k,L){T.on("start.zoom",function(){U(this,arguments).event(L).start()}).on("interrupt.zoom end.zoom",function(){U(this,arguments).event(L).end()}).tween("zoom",function(){var $=this,D=arguments,V=U($,D).event(L),Y=t.apply($,D),J=k==null?_(Y):typeof k=="function"?k.apply($,D):k,ue=Math.max(Y[1][0]-Y[0][0],Y[1][1]-Y[0][1]),Q=$.__zoom,ie=typeof G=="function"?G.apply($,D):G,le=a(Q.invert(J).concat(ue/Q.k),ie.invert(J).concat(ue/ie.k));return function(me){if(me===1)me=ie;else{var be=le(me),fe=ue/be[2];me=new on(fe,J[0]-be[0]*fe,J[1]-be[1]*fe)}V.zoom(null,me)}})}function U(T,G,k){return!k&&T.__zooming||new X(T,G)}function X(T,G){this.that=T,this.args=G,this.active=0,this.sourceEvent=null,this.extent=t.apply(T,G),this.taps=0}X.prototype={event:function(T){return T&&(this.sourceEvent=T),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(T,G){return this.mouse&&T!=="mouse"&&(this.mouse[1]=G.invert(this.mouse[0])),this.touch0&&T!=="touch"&&(this.touch0[1]=G.invert(this.touch0[0])),this.touch1&&T!=="touch"&&(this.touch1[1]=G.invert(this.touch1[0])),this.that.__zoom=G,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(T){var G=wt(this.that).datum();u.call(T,this.that,new o2(T,{sourceEvent:this.sourceEvent,target:M,transform:this.that.__zoom,dispatch:u}),G)}};function H(T,...G){if(!e.apply(this,arguments))return;var k=U(this,G).event(T),L=this.__zoom,$=Math.max(s[0],Math.min(s[1],L.k*Math.pow(2,o.apply(this,arguments)))),D=Ot(T);if(k.wheel)(k.mouse[0][0]!==D[0]||k.mouse[0][1]!==D[1])&&(k.mouse[1]=L.invert(k.mouse[0]=D)),clearTimeout(k.wheel);else{if(L.k===$)return;k.mouse=[D,L.invert(D)],Pi(this),k.start()}wo(T),k.wheel=setTimeout(V,b),k.zoom("mouse",n(g(P(L,$),k.mouse[0],k.mouse[1]),k.extent,r));function V(){k.wheel=null,k.end()}}function F(T,...G){if(p||!e.apply(this,arguments))return;var k=T.currentTarget,L=U(this,G,!0).event(T),$=wt(T.view).on("mousemove.zoom",J,!0).on("mouseup.zoom",ue,!0),D=Ot(T,k),V=T.clientX,Y=T.clientY;nd(T.view),js(T),L.mouse=[D,this.__zoom.invert(D)],Pi(this),L.start();function J(Q){if(wo(Q),!L.moved){var ie=Q.clientX-V,le=Q.clientY-Y;L.moved=ie*ie+le*le>E}L.event(Q).zoom("mouse",n(g(L.that.__zoom,L.mouse[0]=Ot(Q,k),L.mouse[1]),L.extent,r))}function ue(Q){$.on("mousemove.zoom mouseup.zoom",null),od(Q.view,L.moved),wo(Q),L.event(Q).end()}}function Z(T,...G){if(e.apply(this,arguments)){var k=this.__zoom,L=Ot(T.changedTouches?T.changedTouches[0]:T,this),$=k.invert(L),D=k.k*(T.shiftKey?.5:2),V=n(g(P(k,D),L,$),t.apply(this,G),r);wo(T),l>0?wt(this).transition().duration(l).call(O,V,L,T):wt(this).call(M.transform,V,L,T)}}function j(T,...G){if(e.apply(this,arguments)){var k=T.touches,L=k.length,$=U(this,G,T.changedTouches.length===L).event(T),D,V,Y,J;for(js(T),V=0;V(e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom",e))(ae||{}),sl=(e=>(e.Partial="partial",e.Full="full",e))(sl||{}),An=(e=>(e.Bezier="default",e.SimpleBezier="simple-bezier",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e))(An||{}),Cn=(e=>(e.Strict="strict",e.Loose="loose",e))(Cn||{}),Nr=(e=>(e.Arrow="arrow",e.ArrowClosed="arrowclosed",e))(Nr||{}),Vo=(e=>(e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal",e))(Vo||{});const c2=["INPUT","SELECT","TEXTAREA"],d2=typeof document<"u"?document:null;function Tr(e){var t,n;const o=((n=(t=e.composedPath)==null?void 0:t.call(e))==null?void 0:n[0])||e.target,i=typeof o?.hasAttribute=="function"?o.hasAttribute("contenteditable"):!1,s=typeof o?.closest=="function"?o.closest(".nokey"):null;return c2.includes(o?.nodeName)||i||!!s}function f2(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function Ma(e,t,n,o){const i=t.replace("+",` +`).replace(` + +`,` ++`).split(` +`).map(r=>r.trim().toLowerCase());if(i.length===1)return e.toLowerCase()===t.toLowerCase();o||n.add(e.toLowerCase());const s=i.every((r,l)=>n.has(r)&&Array.from(n.values())[l]===i[l]);return o&&n.delete(e.toLowerCase()),s}function h2(e,t){return n=>{if(!n.code&&!n.key)return!1;const o=p2(n.code,e);return Array.isArray(e)?e.some(i=>Ma(n[o],i,t,n.type==="keyup")):Ma(n[o],e,t,n.type==="keyup")}}function p2(e,t){return t.includes(e)?"code":"key"}function Bo(e,t){const n=pe(()=>Ee(t?.target)??d2),o=zo(Ee(e)===!0);let i=!1;const s=new Set;let r=a(Ee(e));xe(()=>Ee(e),(u,c)=>{typeof c=="boolean"&&typeof u!="boolean"&&l(),r=a(u)},{immediate:!0}),Uc(["blur","contextmenu"],l),ca((...u)=>r(...u),u=>{var c,d;const p=Ee(t?.actInsideInputWithModifier)??!0,h=Ee(t?.preventDefault)??!1;if(i=f2(u),(!i||i&&!p)&&Tr(u))return;const E=((d=(c=u.composedPath)==null?void 0:c.call(u))==null?void 0:d[0])||u.target,N=E?.nodeName==="BUTTON"||E?.nodeName==="A";!h&&(i||!N)&&u.preventDefault(),o.value=!0},{eventName:"keydown",target:n}),ca((...u)=>r(...u),u=>{const c=Ee(t?.actInsideInputWithModifier)??!0;if(o.value){if((!i||i&&!c)&&Tr(u))return;i=!1,o.value=!1}},{eventName:"keyup",target:n});function l(){i=!1,s.clear(),o.value=Ee(e)===!0}function a(u){return u===null?(l(),()=>!1):typeof u=="boolean"?(l(),o.value=u,()=>!1):Array.isArray(u)||typeof u=="string"?h2(u,s):u}return o}const md="vue-flow__node-desc",yd="vue-flow__edge-desc",g2="vue-flow__aria-live",_d=["Enter"," ","Escape"],so={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};function Wi(e){return{...e.computedPosition||{x:0,y:0},width:e.dimensions.width||0,height:e.dimensions.height||0}}function Zi(e,t){const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),o=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*o)}function xs(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Yn(e,t=0,n=1){return Math.min(Math.max(e,t),n)}function bd(e,t){return{x:Yn(e.x,t[0][0],t[1][0]),y:Yn(e.y,t[0][1],t[1][1])}}function $a(e){const t=e.getRootNode();return"elementFromPoint"in t?t:window.document}function Nn(e){return e&&typeof e=="object"&&"id"in e&&"source"in e&&"target"in e}function zn(e){return e&&typeof e=="object"&&"id"in e&&"position"in e&&!Nn(e)}function Co(e){return zn(e)&&"computedPosition"in e}function yi(e){return!Number.isNaN(e)&&Number.isFinite(e)}function v2(e){return yi(e.width)&&yi(e.height)&&yi(e.x)&&yi(e.y)}function m2(e,t,n){const o={id:e.id.toString(),type:e.type??"default",dimensions:an({width:0,height:0}),computedPosition:an({z:0,...e.position}),handleBounds:{source:[],target:[]},draggable:void 0,selectable:void 0,connectable:void 0,focusable:void 0,selected:!1,dragging:!1,resizing:!1,initialized:!1,isParent:!1,position:{x:0,y:0},data:He(e.data)?e.data:{},events:an(He(e.events)?e.events:{})};return Object.assign(t??o,e,{id:e.id.toString(),parentNode:n})}function wd(e,t,n){var o,i;const s={id:e.id.toString(),type:e.type??t?.type??"default",source:e.source.toString(),target:e.target.toString(),sourceHandle:(o=e.sourceHandle)==null?void 0:o.toString(),targetHandle:(i=e.targetHandle)==null?void 0:i.toString(),updatable:e.updatable??n?.updatable,selectable:e.selectable??n?.selectable,focusable:e.focusable??n?.focusable,data:He(e.data)?e.data:{},events:an(He(e.events)?e.events:{}),label:e.label??"",interactionWidth:e.interactionWidth??n?.interactionWidth,...n??{}};return Object.assign(t??s,e,{id:e.id.toString()})}function xd(e,t,n,o){const i=typeof e=="string"?e:e.id,s=new Set,r=o==="source"?"target":"source";for(const l of n)l[r]===i&&s.add(l[o]);return t.filter(l=>s.has(l.id))}function y2(...e){if(e.length===3){const[s,r,l]=e;return xd(s,r,l,"target")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(s=>Nn(s)&&s.source===o).map(s=>n.find(r=>zn(r)&&r.id===s.target))}function _2(...e){if(e.length===3){const[s,r,l]=e;return xd(s,r,l,"source")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(s=>Nn(s)&&s.target===o).map(s=>n.find(r=>zn(r)&&r.id===s.source))}function Ed({source:e,sourceHandle:t,target:n,targetHandle:o}){return`vueflow__edge-${e}${t??""}-${n}${o??""}`}function b2(e,t){return t.some(n=>Nn(n)&&n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle))}function Mr({x:e,y:t},{x:n,y:o,zoom:i}){return{x:e*i+n,y:t*i+o}}function Qo({x:e,y:t},{x:n,y:o,zoom:i},s=!1,r=[1,1]){const l={x:(e-n)/i,y:(t-o)/i};return s?Es(l,r):l}function w2(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}}function Sd({x:e,y:t,width:n,height:o}){return{x:e,y:t,x2:e+n,y2:t+o}}function x2({x:e,y:t,x2:n,y2:o}){return{x:e,y:t,width:n-e,height:o-t}}function Cd(e){let t={x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY,x2:Number.NEGATIVE_INFINITY,y2:Number.NEGATIVE_INFINITY};for(let n=0;n0,N=(d??0)*(p??0);(b||E||h>=N||l.dragging)&&r.push(l)}return r}function Td(e,t){const n=new Set;if(typeof e=="string")n.add(e);else if(e.length>=1)for(const o of e)n.add(o.id);return t.filter(o=>n.has(o.source)||n.has(o.target))}function Ia(e,t,n,o,i,s=.1,r={x:0,y:0}){const l=t/(e.width*(1+s)),a=n/(e.height*(1+s)),u=Math.min(l,a),c=Yn(u,o,i),d=e.x+e.width/2,p=e.y+e.height/2,h=t/2-d*c+(r.x??0),b=n/2-p*c+(r.y??0);return{x:h,y:b,zoom:c}}function E2(e,t){return{x:t.x+e.x,y:t.y+e.y,z:(e.z>t.z?e.z:t.z)+1}}function Md(e,t){if(!e.parentNode)return!1;const n=t(e.parentNode);return n?n.selected?!0:Md(n,t):!1}function ei(e,t){return typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}function ka(e,t,n){return en?-Yn(Math.abs(e-n),1,t)/t:0}function $d(e,t,n=15,o=40){const i=ka(e.x,o,t.width-o)*n,s=ka(e.y,o,t.height-o)*n;return[i,s]}function Ys(e,t){if(t){const n=e.position.x+e.dimensions.width-t.dimensions.width,o=e.position.y+e.dimensions.height-t.dimensions.height;if(n>0||o>0||e.position.x<0||e.position.y<0){let i={};if(typeof t.style=="function"?i={...t.style(t)}:t.style&&(i={...t.style}),i.width=i.width??`${t.dimensions.width}px`,i.height=i.height??`${t.dimensions.height}px`,n>0)if(typeof i.width=="string"){const s=Number(i.width.replace("px",""));i.width=`${s+n}px`}else i.width+=n;if(o>0)if(typeof i.height=="string"){const s=Number(i.height.replace("px",""));i.height=`${s+o}px`}else i.height+=o;if(e.position.x<0){const s=Math.abs(e.position.x);if(t.position.x=t.position.x-s,typeof i.width=="string"){const r=Number(i.width.replace("px",""));i.width=`${r+s}px`}else i.width+=s;e.position.x=0}if(e.position.y<0){const s=Math.abs(e.position.y);if(t.position.y=t.position.y-s,typeof i.height=="string"){const r=Number(i.height.replace("px",""));i.height=`${r+s}px`}else i.height+=s;e.position.y=0}t.dimensions.width=Number(i.width.toString().replace("px","")),t.dimensions.height=Number(i.height.toString().replace("px","")),typeof t.style=="function"?t.style=s=>{const r=t.style;return{...r(s),...i}}:t.style={...t.style,...i}}}}function Pa(e,t){var n,o;const i=e.filter(r=>r.type==="add"||r.type==="remove");for(const r of i)if(r.type==="add")t.findIndex(a=>a.id===r.item.id)===-1&&t.push(r.item);else if(r.type==="remove"){const l=t.findIndex(a=>a.id===r.id);l!==-1&&t.splice(l,1)}const s=t.map(r=>r.id);for(const r of t)for(const l of e)if(l.id===r.id)switch(l.type){case"select":r.selected=l.selected;break;case"position":if(Co(r)&&(typeof l.position<"u"&&(r.position=l.position),typeof l.dragging<"u"&&(r.dragging=l.dragging),r.expandParent&&r.parentNode)){const a=t[s.indexOf(r.parentNode)];a&&Co(a)&&Ys(r,a)}break;case"dimensions":if(Co(r)&&(typeof l.dimensions<"u"&&(r.dimensions=l.dimensions),typeof l.updateStyle<"u"&&l.updateStyle&&(r.style={...r.style||{},width:`${(n=l.dimensions)==null?void 0:n.width}px`,height:`${(o=l.dimensions)==null?void 0:o.height}px`}),typeof l.resizing<"u"&&(r.resizing=l.resizing),r.expandParent&&r.parentNode)){const a=t[s.indexOf(r.parentNode)];a&&Co(a)&&(!!a.dimensions.width&&!!a.dimensions.height?Ys(r,a):ht(()=>{Ys(r,a)}))}break}return t}function _n(e,t){return{id:e,type:"select",selected:t}}function Aa(e){return{item:e,type:"add"}}function Da(e){return{id:e,type:"remove"}}function Oa(e,t,n,o,i){return{id:e,source:t,target:n,sourceHandle:o||null,targetHandle:i||null,type:"remove"}}function xn(e,t=new Set,n=!1){const o=[];for(const[i,s]of e){const r=t.has(i);!(s.selected===void 0&&!r)&&s.selected!==r&&(n&&(s.selected=r),o.push(_n(s.id,r)))}return o}function re(e){const t=new Set;let n=!1;const o=()=>t.size>0;e&&(n=!0,t.add(e));const i=l=>{t.delete(l)};return{on:l=>{e&&n&&t.delete(e),t.add(l);const a=()=>{i(l),e&&n&&t.add(e)};return ms(a),{off:a}},off:i,trigger:l=>Promise.all(Array.from(t).map(a=>a(l))),hasListeners:o,fns:t}}function Ra(e,t,n){let o=e;do{if(o&&o.matches(t))return!0;if(o===n)return!1;o=o.parentElement}while(o);return!1}function S2(e,t,n,o,i){var s,r;const l=[];for(const a of e)(a.selected||a.id===i)&&(!a.parentNode||!Md(a,o))&&(a.draggable||t&&typeof a.draggable>"u")&&l.push(an({id:a.id,position:a.position||{x:0,y:0},distance:{x:n.x-((s=a.computedPosition)==null?void 0:s.x)||0,y:n.y-((r=a.computedPosition)==null?void 0:r.y)||0},from:a.computedPosition,extent:a.extent,parentNode:a.parentNode,dimensions:a.dimensions,expandParent:a.expandParent}));return l}function Ks({id:e,dragItems:t,findNode:n}){const o=[];for(const i of t){const s=n(i.id);s&&o.push(s)}return[e?o.find(i=>i.id===e):o[0],o]}function Id(e){if(Array.isArray(e))switch(e.length){case 1:return[e[0],e[0],e[0],e[0]];case 2:return[e[0],e[1],e[0],e[1]];case 3:return[e[0],e[1],e[2],e[1]];case 4:return e;default:return[0,0,0,0]}return[e,e,e,e]}function C2(e,t,n){const[o,i,s,r]=typeof e!="string"?Id(e.padding):[0,0,0,0];return n&&typeof n.computedPosition.x<"u"&&typeof n.computedPosition.y<"u"&&typeof n.dimensions.width<"u"&&typeof n.dimensions.height<"u"?[[n.computedPosition.x+r,n.computedPosition.y+o],[n.computedPosition.x+n.dimensions.width-i,n.computedPosition.y+n.dimensions.height-s]]:!1}function N2(e,t,n,o){let i=e.extent||n;if((i==="parent"||!Array.isArray(i)&&i?.range==="parent")&&!e.expandParent)if(e.parentNode&&o&&e.dimensions.width&&e.dimensions.height){const s=C2(i,e,o);s&&(i=s)}else t(new Ge(Ue.NODE_EXTENT_INVALID,e.id)),i=n;else if(Array.isArray(i)){const s=o?.computedPosition.x||0,r=o?.computedPosition.y||0;i=[[i[0][0]+s,i[0][1]+r],[i[1][0]+s,i[1][1]+r]]}else if(i!=="parent"&&i?.range&&Array.isArray(i.range)){const[s,r,l,a]=Id(i.padding),u=o?.computedPosition.x||0,c=o?.computedPosition.y||0;i=[[i.range[0][0]+u+a,i.range[0][1]+c+s],[i.range[1][0]+u-r,i.range[1][1]+c-l]]}return i==="parent"?[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]]:i}function T2({width:e,height:t},n){return[n[0],[n[1][0]-(e||0),n[1][1]-(t||0)]]}function rl(e,t,n,o,i){const s=T2(e.dimensions,N2(e,n,o,i)),r=bd(t,s);return{position:{x:r.x-(i?.computedPosition.x||0),y:r.y-(i?.computedPosition.y||0)},computedPosition:r}}function ho(e,t,n=ae.Left,o=!1){const i=(t?.x??0)+e.computedPosition.x,s=(t?.y??0)+e.computedPosition.y,{width:r,height:l}=t??k2(e);if(o)return{x:i+r/2,y:s+l/2};switch(t?.position??n){case ae.Top:return{x:i+r/2,y:s};case ae.Right:return{x:i+r,y:s+l/2};case ae.Bottom:return{x:i+r/2,y:s+l};case ae.Left:return{x:i,y:s+l/2}}}function Va(e,t){return e&&(t?e.find(n=>n.id===t):e[0])||null}function M2({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:o,targetWidth:i,targetHeight:s,width:r,height:l,viewport:a}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+o,t.y+s)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const c=Sd({x:(0-a.x)/a.zoom,y:(0-a.y)/a.zoom,width:r/a.zoom,height:l/a.zoom}),d=Math.max(0,Math.min(c.x2,u.x2)-Math.max(c.x,u.x)),p=Math.max(0,Math.min(c.y2,u.y2)-Math.max(c.y,u.y));return Math.ceil(d*p)>0}function $2(e,t,n=!1){const o=typeof e.zIndex=="number";let i=o?e.zIndex:0;const s=t(e.source),r=t(e.target);return!s||!r?0:(n&&(i=o?e.zIndex:Math.max(s.computedPosition.z||0,r.computedPosition.z||0)),i)}var Ue=(e=>(e.MISSING_STYLES="MISSING_STYLES",e.MISSING_VIEWPORT_DIMENSIONS="MISSING_VIEWPORT_DIMENSIONS",e.NODE_INVALID="NODE_INVALID",e.NODE_NOT_FOUND="NODE_NOT_FOUND",e.NODE_MISSING_PARENT="NODE_MISSING_PARENT",e.NODE_TYPE_MISSING="NODE_TYPE_MISSING",e.NODE_EXTENT_INVALID="NODE_EXTENT_INVALID",e.EDGE_INVALID="EDGE_INVALID",e.EDGE_NOT_FOUND="EDGE_NOT_FOUND",e.EDGE_SOURCE_MISSING="EDGE_SOURCE_MISSING",e.EDGE_TARGET_MISSING="EDGE_TARGET_MISSING",e.EDGE_TYPE_MISSING="EDGE_TYPE_MISSING",e.EDGE_SOURCE_TARGET_SAME="EDGE_SOURCE_TARGET_SAME",e.EDGE_SOURCE_TARGET_MISSING="EDGE_SOURCE_TARGET_MISSING",e.EDGE_ORPHANED="EDGE_ORPHANED",e.USEVUEFLOW_OPTIONS="USEVUEFLOW_OPTIONS",e))(Ue||{});const Ba={MISSING_STYLES:()=>"It seems that you haven't loaded the necessary styles. Please import '@vue-flow/core/dist/style.css' to ensure that the graph is rendered correctly",MISSING_VIEWPORT_DIMENSIONS:()=>"The Vue Flow parent container needs a width and a height to render the graph",NODE_INVALID:e=>`Node is invalid +Node: ${e}`,NODE_NOT_FOUND:e=>`Node not found +Node: ${e}`,NODE_MISSING_PARENT:(e,t)=>`Node is missing a parent +Node: ${e} +Parent: ${t}`,NODE_TYPE_MISSING:e=>`Node type is missing +Type: ${e}`,NODE_EXTENT_INVALID:e=>`Only child nodes can use a parent extent +Node: ${e}`,EDGE_INVALID:e=>`An edge needs a source and a target +Edge: ${e}`,EDGE_SOURCE_MISSING:(e,t)=>`Edge source is missing +Edge: ${e} +Source: ${t}`,EDGE_TARGET_MISSING:(e,t)=>`Edge target is missing +Edge: ${e} +Target: ${t}`,EDGE_TYPE_MISSING:e=>`Edge type is missing +Type: ${e}`,EDGE_SOURCE_TARGET_SAME:(e,t,n)=>`Edge source and target are the same +Edge: ${e} +Source: ${t} +Target: ${n}`,EDGE_SOURCE_TARGET_MISSING:(e,t,n)=>`Edge source or target is missing +Edge: ${e} +Source: ${t} +Target: ${n}`,EDGE_ORPHANED:e=>`Edge was orphaned (suddenly missing source or target) and has been removed +Edge: ${e}`,EDGE_NOT_FOUND:e=>`Edge not found +Edge: ${e}`,USEVUEFLOW_OPTIONS:()=>"The options parameter is deprecated and will be removed in the next major version. Please use the id parameter instead"};class Ge extends Error{constructor(t,...n){var o;super((o=Ba[t])==null?void 0:o.call(Ba,...n)),this.name="VueFlowError",this.code=t,this.args=n}}function ll(e){return"clientX"in e}function I2(e){return"sourceEvent"in e}function Bt(e,t){const n=ll(e);let o,i;return n?(o=e.clientX,i=e.clientY):"touches"in e&&e.touches.length>0?(o=e.touches[0].clientX,i=e.touches[0].clientY):"changedTouches"in e&&e.changedTouches.length>0?(o=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY):(o=0,i=0),{x:o-(t?.left??0),y:i-(t?.top??0)}}const qi=()=>{var e;return typeof navigator<"u"&&((e=navigator?.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function k2(e){var t,n;return{width:((t=e.dimensions)==null?void 0:t.width)??e.width??0,height:((n=e.dimensions)==null?void 0:n.height)??e.height??0}}function Es(e,t=[1,1]){return{x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}}const P2=()=>!0;function Xs(e){e?.classList.remove("valid","connecting","vue-flow__handle-valid","vue-flow__handle-connecting")}function A2(e,t,n){const o=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const s of t.values())Zi(i,Wi(s))>0&&o.push(s);return o}const D2=250;function O2(e,t,n,o){var i,s;let r=[],l=Number.POSITIVE_INFINITY;const a=A2(e,n,t+D2);for(const u of a){const c=[...((i=u.handleBounds)==null?void 0:i.source)??[],...((s=u.handleBounds)==null?void 0:s.target)??[]];for(const d of c){if(o.nodeId===d.nodeId&&o.type===d.type&&o.id===d.id)continue;const{x:p,y:h}=ho(u,d,d.position,!0),b=Math.sqrt((p-e.x)**2+(h-e.y)**2);b>t||(b1){const u=o.type==="source"?"target":"source";return r.find(c=>c.type===u)??r[0]}return r[0]}function La(e,{handle:t,connectionMode:n,fromNodeId:o,fromHandleId:i,fromType:s,doc:r,lib:l,flowId:a,isValidConnection:u=P2},c,d,p){const h=s==="target",b=t?r.querySelector(`.${l}-flow__handle[data-id="${a}-${t?.nodeId}-${t?.id}-${t?.type}"]`):null,{x:E,y:N}=Bt(e),M=r.elementFromPoint(E,N),P=M?.classList.contains(`${l}-flow__handle`)?M:b,g={handleDomNode:P,isValid:!1,connection:null,toHandle:null};if(P){const _=kd(void 0,P),O=P.getAttribute("data-nodeid"),U=P.getAttribute("data-handleid"),X=P.classList.contains("connectable"),H=P.classList.contains("connectableend");if(!O||!_)return g;const F={source:h?O:o,sourceHandle:h?U:i,target:h?o:O,targetHandle:h?i:U};g.connection=F;const j=X&&H&&(n===Cn.Strict?h&&_==="source"||!h&&_==="target":O!==o||U!==i);g.isValid=j&&u(F,{nodes:d,edges:c,sourceNode:p(o),targetNode:p(O)}),g.toHandle=t}return g}function kd(e,t){return e||(t?.classList.contains("target")?"target":t?.classList.contains("source")?"source":null)}function R2(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function V2(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}function B2(e,t,n,o,i,s=!1){var r,l,a;const u=o.get(e);if(!u)return null;const c=i===Cn.Strict?(r=u.handleBounds)==null?void 0:r[t]:[...((l=u.handleBounds)==null?void 0:l.source)??[],...((a=u.handleBounds)==null?void 0:a.target)??[]],d=(n?c?.find(p=>p.id===n):c?.[0])??null;return d&&s?{...d,...ho(u,d,d.position,!0)}:d}const $r={[ae.Left]:ae.Right,[ae.Right]:ae.Left,[ae.Top]:ae.Bottom,[ae.Bottom]:ae.Top},L2=["production","prod"];function Ss(e,...t){Pd()&&console.warn(`[Vue Flow]: ${e}`,...t)}function Pd(){return!L2.includes("production")}function Fa(e,t,n,o,i){const s=t.querySelectorAll(`.vue-flow__handle.${e}`);return s?.length?Array.from(s).map(r=>{const l=r.getBoundingClientRect();return{id:r.getAttribute("data-handleid"),type:e,nodeId:i,position:r.getAttribute("data-handlepos"),x:(l.left-n.left)/o,y:(l.top-n.top)/o,...xs(r)}}):null}function Ir(e,t,n,o,i,s=!1,r){i.value=!1,e.selected?(s||e.selected&&t)&&(o([e]),ht(()=>{r.blur()})):n([e])}function He(e){return typeof oe(e)<"u"}function F2(e,t,n,o){if(!e||!e.source||!e.target)return n(new Ge(Ue.EDGE_INVALID,e?.id??"[ID UNKNOWN]")),!1;let i;return Nn(e)?i=e:i={...e,id:Ed(e)},i=wd(i,void 0,o),b2(i,t)?!1:i}function z2(e,t,n,o,i){if(!t.source||!t.target)return i(new Ge(Ue.EDGE_INVALID,e.id)),!1;if(!n)return i(new Ge(Ue.EDGE_NOT_FOUND,e.id)),!1;const{id:s,...r}=e;return{...r,id:o?Ed(t):s,source:t.source,target:t.target,sourceHandle:t.sourceHandle,targetHandle:t.targetHandle}}function za(e,t,n){const o={},i=[];for(let s=0;sl.id===s.parentNode);s.parentNode&&!r&&n(new Ge(Ue.NODE_MISSING_PARENT,s.id,s.parentNode)),(s.parentNode||o[s.id])&&(o[s.id]&&(s.isParent=!0),r&&(r.isParent=!0))}return i}function Ha(e,t,n,o,i,s){let r=i;const l=o.get(r)||new Map;o.set(r,l.set(n,t)),r=`${i}-${e}`;const a=o.get(r)||new Map;if(o.set(r,a.set(n,t)),s){r=`${i}-${e}-${s}`;const u=o.get(r)||new Map;o.set(r,u.set(n,t))}}function Ws(e,t,n){e.clear();for(const o of n){const{source:i,target:s,sourceHandle:r=null,targetHandle:l=null}=o,a={edgeId:o.id,source:i,target:s,sourceHandle:r,targetHandle:l},u=`${i}-${r}--${s}-${l}`,c=`${s}-${l}--${i}-${r}`;Ha("source",a,c,e,i,r),Ha("target",a,u,e,s,l)}}function Ua(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function Zs(e,t,n,o,i,s,r,l){const a=[];for(const u of e){const c=Nn(u)?u:F2(u,l,i,s);if(!c)continue;const d=n(c.source),p=n(c.target);if(!d||!p){i(new Ge(Ue.EDGE_SOURCE_TARGET_MISSING,c.id,c.source,c.target));continue}if(!d){i(new Ge(Ue.EDGE_SOURCE_MISSING,c.id,c.source));continue}if(!p){i(new Ge(Ue.EDGE_TARGET_MISSING,c.id,c.target));continue}if(t&&!t(c,{edges:l,nodes:r,sourceNode:d,targetNode:p})){i(new Ge(Ue.EDGE_INVALID,c.id));continue}const h=o(c.id);a.push({...wd(c,h,s),sourceNode:d,targetNode:p})}return a}const Ga=Symbol("vueFlow"),Ad=Symbol("nodeId"),Dd=Symbol("nodeRef"),H2=Symbol("edgeId"),U2=Symbol("edgeRef"),Cs=Symbol("slots");function Od(e){const{vueFlowRef:t,snapToGrid:n,snapGrid:o,noDragClassName:i,nodes:s,nodeExtent:r,nodeDragThreshold:l,viewport:a,autoPanOnNodeDrag:u,autoPanSpeed:c,nodesDraggable:d,panBy:p,findNode:h,multiSelectionActive:b,nodesSelectionActive:E,selectNodesOnDrag:N,removeSelectedElements:M,addSelectedNodes:P,updateNodePositions:g,emits:_}=Fe(),{onStart:O,onDrag:U,onStop:X,onClick:H,el:F,disabled:Z,id:j,selectable:C,dragHandle:ee}=e,T=zo(!1);let G=[],k,L=null,$={x:void 0,y:void 0},D={x:0,y:0},V=null,Y=!1,J=0,ue=!1;const Q=Y2(),ie=({x:de,y:w})=>{$={x:de,y:w};let S=!1;if(G=G.map(f=>{const v={x:de-f.distance.x,y:w-f.distance.y},{computedPosition:y}=rl(f,n.value?Es(v,o.value):v,_.error,r.value,f.parentNode?h(f.parentNode):void 0);return S=S||f.position.x!==y.x||f.position.y!==y.y,f.position=y,f}),!!S&&(g(G,!0,!0),T.value=!0,V)){const[f,v]=Ks({id:j,dragItems:G,findNode:h});U({event:V,node:f,nodes:v})}},le=()=>{if(!L)return;const[de,w]=$d(D,L,c.value);if(de!==0||w!==0){const S={x:($.x??0)-de/a.value.zoom,y:($.y??0)-w/a.value.zoom};p({x:de,y:w})&&ie(S)}J=requestAnimationFrame(le)},me=(de,w)=>{Y=!0;const S=h(j);!N.value&&!b.value&&S&&(S.selected||M()),S&&Ee(C)&&N.value&&Ir(S,b.value,P,M,E,!1,w);const f=Q(de.sourceEvent);if($=f,G=S2(s.value,d.value,f,h,j),G.length){const[v,y]=Ks({id:j,dragItems:G,findNode:h});O({event:de.sourceEvent,node:v,nodes:y})}},be=(de,w)=>{var S;de.sourceEvent.type==="touchmove"&&de.sourceEvent.touches.length>1||(l.value===0&&me(de,w),$=Q(de.sourceEvent),L=((S=t.value)==null?void 0:S.getBoundingClientRect())||null,D=Bt(de.sourceEvent,L))},fe=(de,w)=>{const S=Q(de.sourceEvent);if(!ue&&Y&&u.value&&(ue=!0,le()),!Y){const f=S.xSnapped-($.x??0),v=S.ySnapped-($.y??0);Math.sqrt(f*f+v*v)>l.value&&me(de,w)}($.x!==S.xSnapped||$.y!==S.ySnapped)&&G.length&&Y&&(V=de.sourceEvent,D=Bt(de.sourceEvent,L),ie(S))},we=de=>{let w=!1;if(!Y&&!T.value&&!b.value){const S=de.sourceEvent,f=Q(S),v=f.xSnapped-($.x??0),y=f.ySnapped-($.y??0),m=Math.sqrt(v*v+y*y);m!==0&&m<=l.value&&(H?.(S),w=!0)}if(G.length&&!w){g(G,!1,!1);const[S,f]=Ks({id:j,dragItems:G,findNode:h});X({event:de.sourceEvent,node:S,nodes:f})}G=[],T.value=!1,ue=!1,Y=!1,$={x:void 0,y:void 0},cancelAnimationFrame(J)};return xe([()=>Ee(Z),F],([de,w],S,f)=>{if(w){const v=wt(w);de||(k=v0().on("start",y=>be(y,w)).on("drag",y=>fe(y,w)).on("end",y=>we(y)).filter(y=>{const m=y.target,I=Ee(ee);return!y.button&&(!i.value||!Ra(m,`.${i.value}`,w)&&(!I||Ra(m,I,w)))}),v.call(k)),f(()=>{v.on(".drag",null),k&&(k.on("start",null),k.on("drag",null),k.on("end",null))})}}),T}function G2(){return{doubleClick:re(),click:re(),mouseEnter:re(),mouseMove:re(),mouseLeave:re(),contextMenu:re(),updateStart:re(),update:re(),updateEnd:re()}}function j2(e,t){const n=G2();return n.doubleClick.on(o=>{var i,s;t.edgeDoubleClick(o),(s=(i=e.events)==null?void 0:i.doubleClick)==null||s.call(i,o)}),n.click.on(o=>{var i,s;t.edgeClick(o),(s=(i=e.events)==null?void 0:i.click)==null||s.call(i,o)}),n.mouseEnter.on(o=>{var i,s;t.edgeMouseEnter(o),(s=(i=e.events)==null?void 0:i.mouseEnter)==null||s.call(i,o)}),n.mouseMove.on(o=>{var i,s;t.edgeMouseMove(o),(s=(i=e.events)==null?void 0:i.mouseMove)==null||s.call(i,o)}),n.mouseLeave.on(o=>{var i,s;t.edgeMouseLeave(o),(s=(i=e.events)==null?void 0:i.mouseLeave)==null||s.call(i,o)}),n.contextMenu.on(o=>{var i,s;t.edgeContextMenu(o),(s=(i=e.events)==null?void 0:i.contextMenu)==null||s.call(i,o)}),n.updateStart.on(o=>{var i,s;t.edgeUpdateStart(o),(s=(i=e.events)==null?void 0:i.updateStart)==null||s.call(i,o)}),n.update.on(o=>{var i,s;t.edgeUpdate(o),(s=(i=e.events)==null?void 0:i.update)==null||s.call(i,o)}),n.updateEnd.on(o=>{var i,s;t.edgeUpdateEnd(o),(s=(i=e.events)==null?void 0:i.updateEnd)==null||s.call(i,o)}),Object.entries(n).reduce((o,[i,s])=>(o.emit[i]=s.trigger,o.on[i]=s.on,o),{emit:{},on:{}})}function Y2(){const{viewport:e,snapGrid:t,snapToGrid:n,vueFlowRef:o}=Fe();return i=>{var s;const r=((s=o.value)==null?void 0:s.getBoundingClientRect())??{left:0,top:0},l=I2(i)?i.sourceEvent:i,{x:a,y:u}=Bt(l,r),c=Qo({x:a,y:u},e.value),{x:d,y:p}=n.value?Es(c,t.value):c;return{xSnapped:d,ySnapped:p,...c}}}function _i(){return!0}function Rd({handleId:e,nodeId:t,type:n,isValidConnection:o,edgeUpdaterType:i,onEdgeUpdate:s,onEdgeUpdateEnd:r}){const{id:l,vueFlowRef:a,connectionMode:u,connectionRadius:c,connectOnClick:d,connectionClickStartHandle:p,nodesConnectable:h,autoPanOnConnect:b,autoPanSpeed:E,findNode:N,panBy:M,startConnection:P,updateConnection:g,endConnection:_,emits:O,viewport:U,edges:X,nodes:H,isValidConnection:F,nodeLookup:Z}=Fe();let j=null,C=!1,ee=null;function T(k){var L;const $=Ee(n)==="target",D=ll(k),V=$a(k.target);if(D&&k.button===0||!D){let Y=function(q){f=Bt(q,de),ie=O2(Qo(f,U.value,!1,[1,1]),c.value,Z.value,m),v||(y(),v=!0);const K=La(q,{handle:ie,connectionMode:u.value,fromNodeId:Ee(t),fromHandleId:Ee(e),fromType:$?"target":"source",isValidConnection:Q,doc:V,lib:"vue",flowId:l,nodeLookup:Z.value},X.value,H.value,N);ee=K.handleDomNode,j=K.connection,C=V2(!!ie,K.isValid);const ne={...A,isValid:C,to:K.toHandle&&C?Mr({x:K.toHandle.x,y:K.toHandle.y},U.value):f,toHandle:K.toHandle,toPosition:C&&K.toHandle?K.toHandle.position:$r[m.position],toNode:K.toHandle?Z.value.get(K.toHandle.nodeId):null};if(!(C&&ie&&A?.toHandle&&ne.toHandle&&A.toHandle.type===ne.toHandle.type&&A.toHandle.nodeId===ne.toHandle.nodeId&&A.toHandle.id===ne.toHandle.id&&A.to.x===ne.to.x&&A.to.y===ne.to.y)){if(g(ie&&C?Mr({x:ie.x,y:ie.y},U.value):f,K.toHandle,R2(!!ie,C)),A=ne,!ie&&!C&&!ee)return Xs(S);j&&j.source!==j.target&&ee&&(Xs(S),S=ee,ee.classList.add("connecting","vue-flow__handle-connecting"),ee.classList.toggle("valid",!!C),ee.classList.toggle("vue-flow__handle-valid",!!C))}},J=function(q){(ie||ee)&&j&&C&&(s?s(q,j):O.connect(j)),O.connectEnd(q),i&&r?.(q),Xs(S),cancelAnimationFrame(le),_(q),v=!1,C=!1,j=null,ee=null,V.removeEventListener("mousemove",Y),V.removeEventListener("mouseup",J),V.removeEventListener("touchmove",Y),V.removeEventListener("touchend",J)};const ue=N(Ee(t));let Q=Ee(o)||F.value||_i;!Q&&ue&&(Q=($?ue.isValidSourcePos:ue.isValidTargetPos)||_i);let ie,le=0;const{x:me,y:be}=Bt(k),fe=V?.elementFromPoint(me,be),we=kd(Ee(i),fe),de=(L=a.value)==null?void 0:L.getBoundingClientRect();if(!de||!we)return;const w=B2(Ee(t),we,Ee(e),Z.value,u.value);if(!w)return;let S,f=Bt(k,de),v=!1;const y=()=>{if(!b.value)return;const[q,K]=$d(f,de,E.value);M({x:q,y:K}),le=requestAnimationFrame(y)},m={...w,nodeId:Ee(t),type:we,position:w.position},I=Z.value.get(Ee(t)),R={inProgress:!0,isValid:null,from:ho(I,m,ae.Left,!0),fromHandle:m,fromPosition:m.position,fromNode:I,to:f,toHandle:null,toPosition:$r[m.position],toNode:null};P({nodeId:Ee(t),id:Ee(e),type:we,position:fe?.getAttribute("data-handlepos")||ae.Top,...f},{x:me-de.left,y:be-de.top}),O.connectStart({event:k,nodeId:Ee(t),handleId:Ee(e),handleType:we});let A=R;V.addEventListener("mousemove",Y),V.addEventListener("mouseup",J),V.addEventListener("touchmove",Y),V.addEventListener("touchend",J)}}function G(k){var L,$;if(!d.value)return;const D=Ee(n)==="target";if(!p.value){O.clickConnectStart({event:k,nodeId:Ee(t),handleId:Ee(e)}),P({nodeId:Ee(t),type:Ee(n),id:Ee(e),position:ae.Top,...Bt(k)},void 0,!0);return}let V=Ee(o)||F.value||_i;const Y=N(Ee(t));if(!V&&Y&&(V=(D?Y.isValidSourcePos:Y.isValidTargetPos)||_i),Y&&(typeof Y.connectable>"u"?h.value:Y.connectable)===!1)return;const J=$a(k.target),ue=La(k,{handle:{nodeId:Ee(t),id:Ee(e),type:Ee(n),position:ae.Top,...Bt(k)},connectionMode:u.value,fromNodeId:p.value.nodeId,fromHandleId:p.value.id??null,fromType:p.value.type,isValidConnection:V,doc:J,lib:"vue",flowId:l,nodeLookup:Z.value},X.value,H.value,N),Q=((L=ue.connection)==null?void 0:L.source)===(($=ue.connection)==null?void 0:$.target);ue.isValid&&ue.connection&&!Q&&O.connect(ue.connection),O.clickConnectEnd(k),_(k,!0)}return{handlePointerDown:T,handleClick:G}}function K2(){return mt(Ad,"")}function Vd(e){const t=e??K2()??"",n=mt(Dd,te(null)),{findNode:o,edges:i,emits:s}=Fe(),r=o(t);return r||s.error(new Ge(Ue.NODE_NOT_FOUND,t)),{id:t,nodeEl:n,node:r,parentNode:pe(()=>o(r.parentNode)),connectedEdges:pe(()=>Td([r],i.value))}}function X2(){return{doubleClick:re(),click:re(),mouseEnter:re(),mouseMove:re(),mouseLeave:re(),contextMenu:re(),dragStart:re(),drag:re(),dragStop:re()}}function W2(e,t){const n=X2();return n.doubleClick.on(o=>{var i,s;t.nodeDoubleClick(o),(s=(i=e.events)==null?void 0:i.doubleClick)==null||s.call(i,o)}),n.click.on(o=>{var i,s;t.nodeClick(o),(s=(i=e.events)==null?void 0:i.click)==null||s.call(i,o)}),n.mouseEnter.on(o=>{var i,s;t.nodeMouseEnter(o),(s=(i=e.events)==null?void 0:i.mouseEnter)==null||s.call(i,o)}),n.mouseMove.on(o=>{var i,s;t.nodeMouseMove(o),(s=(i=e.events)==null?void 0:i.mouseMove)==null||s.call(i,o)}),n.mouseLeave.on(o=>{var i,s;t.nodeMouseLeave(o),(s=(i=e.events)==null?void 0:i.mouseLeave)==null||s.call(i,o)}),n.contextMenu.on(o=>{var i,s;t.nodeContextMenu(o),(s=(i=e.events)==null?void 0:i.contextMenu)==null||s.call(i,o)}),n.dragStart.on(o=>{var i,s;t.nodeDragStart(o),(s=(i=e.events)==null?void 0:i.dragStart)==null||s.call(i,o)}),n.drag.on(o=>{var i,s;t.nodeDrag(o),(s=(i=e.events)==null?void 0:i.drag)==null||s.call(i,o)}),n.dragStop.on(o=>{var i,s;t.nodeDragStop(o),(s=(i=e.events)==null?void 0:i.dragStop)==null||s.call(i,o)}),Object.entries(n).reduce((o,[i,s])=>(o.emit[i]=s.trigger,o.on[i]=s.on,o),{emit:{},on:{}})}function Bd(){const{getSelectedNodes:e,nodeExtent:t,updateNodePositions:n,findNode:o,snapGrid:i,snapToGrid:s,nodesDraggable:r,emits:l}=Fe();return(a,u=!1)=>{const c=s.value?i.value[0]:5,d=s.value?i.value[1]:5,p=u?4:1,h=a.x*c*p,b=a.y*d*p,E=[];for(const N of e.value)if(N.draggable||r&&typeof N.draggable>"u"){const M={x:N.computedPosition.x+h,y:N.computedPosition.y+b},{computedPosition:P}=rl(N,M,l.error,t.value,N.parentNode?o(N.parentNode):void 0);E.push({id:N.id,position:P,from:N.position,distance:{x:a.x,y:a.y},dimensions:N.dimensions})}n(E,!0,!1)}}const qs=.1,Z2=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2;function vn(){return Ss("Viewport not initialized yet."),Promise.resolve(!1)}const q2={zoomIn:vn,zoomOut:vn,zoomTo:vn,fitView:vn,setCenter:vn,fitBounds:vn,project:e=>e,screenToFlowCoordinate:e=>e,flowToScreenCoordinate:e=>e,setViewport:vn,setTransform:vn,getViewport:()=>({x:0,y:0,zoom:1}),getTransform:()=>({x:0,y:0,zoom:1}),viewportInitialized:!1};function J2(e){function t(o,i){return new Promise(s=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate(i?.interpolate==="linear"?Ro:$i).scaleBy(Js(e.d3Selection,i?.duration,i?.ease,()=>{s(!0)}),o):s(!1)})}function n(o,i,s,r){return new Promise(l=>{var a;const{x:u,y:c}=bd({x:-o,y:-i},e.translateExtent),d=fo.translate(-u,-c).scale(s);e.d3Selection&&e.d3Zoom?(a=e.d3Zoom)==null||a.interpolate(r?.interpolate==="linear"?Ro:$i).transform(Js(e.d3Selection,r?.duration,r?.ease,()=>{l(!0)}),d):l(!1)})}return pe(()=>e.d3Zoom&&e.d3Selection&&e.dimensions.width&&e.dimensions.height?{viewportInitialized:!0,zoomIn:i=>t(1.2,i),zoomOut:i=>t(1/1.2,i),zoomTo:(i,s)=>new Promise(r=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate(s?.interpolate==="linear"?Ro:$i).scaleTo(Js(e.d3Selection,s?.duration,s?.ease,()=>{r(!0)}),i):r(!1)}),setViewport:(i,s)=>n(i.x,i.y,i.zoom,s),setTransform:(i,s)=>n(i.x,i.y,i.zoom,s),getViewport:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),getTransform:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),fitView:(i={padding:qs,includeHiddenNodes:!1,duration:0})=>{var s,r;const l=[];for(const p of e.nodes)p.dimensions.width&&p.dimensions.height&&(i?.includeHiddenNodes||!p.hidden)&&(!((s=i.nodes)!=null&&s.length)||(r=i.nodes)!=null&&r.length&&i.nodes.includes(p.id))&&l.push(p);if(!l.length)return Promise.resolve(!1);const a=Cd(l),{x:u,y:c,zoom:d}=Ia(a,e.dimensions.width,e.dimensions.height,i.minZoom??e.minZoom,i.maxZoom??e.maxZoom,i.padding??qs,i.offset);return n(u,c,d,i)},setCenter:(i,s,r)=>{const l=typeof r?.zoom<"u"?r.zoom:e.maxZoom,a=e.dimensions.width/2-i*l,u=e.dimensions.height/2-s*l;return n(a,u,l,r)},fitBounds:(i,s={padding:qs})=>{const{x:r,y:l,zoom:a}=Ia(i,e.dimensions.width,e.dimensions.height,e.minZoom,e.maxZoom,s.padding);return n(r,l,a,s)},project:i=>Qo(i,e.viewport,e.snapToGrid,e.snapGrid),screenToFlowCoordinate:i=>{if(e.vueFlowRef){const{x:s,y:r}=e.vueFlowRef.getBoundingClientRect(),l={x:i.x-s,y:i.y-r};return Qo(l,e.viewport,e.snapToGrid,e.snapGrid)}return{x:0,y:0}},flowToScreenCoordinate:i=>{if(e.vueFlowRef){const{x:s,y:r}=e.vueFlowRef.getBoundingClientRect(),l={x:i.x+s,y:i.y+r};return Mr(l,e.viewport)}return{x:0,y:0}}}:q2)}function Js(e,t=0,n=Z2,o=()=>{}){const i=typeof t=="number"&&t>0;return i||o(),i?e.transition().duration(t).ease(n).on("end",o):e}function Q2(e,t,n){const o=os(!0);return o.run(()=>{const i=()=>{o.run(()=>{let E,N,M=!!(n.nodes.value.length||n.edges.value.length);E=Zn([e.modelValue,()=>{var P,g;return(g=(P=e.modelValue)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setElements(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.nodes,n.edges,()=>n.edges.value.length,()=>n.nodes.value.length],([P,g])=>{var _;(_=e.modelValue)!=null&&_.value&&Array.isArray(e.modelValue.value)&&(E?.pause(),e.modelValue.value=[...P,...g],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},s=()=>{o.run(()=>{let E,N,M=!!n.nodes.value.length;E=Zn([e.nodes,()=>{var P,g;return(g=(P=e.nodes)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setNodes(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.nodes,()=>n.nodes.value.length],([P])=>{var g;(g=e.nodes)!=null&&g.value&&Array.isArray(e.nodes.value)&&(E?.pause(),e.nodes.value=[...P],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},r=()=>{o.run(()=>{let E,N,M=!!n.edges.value.length;E=Zn([e.edges,()=>{var P,g;return(g=(P=e.edges)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setEdges(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.edges,()=>n.edges.value.length],([P])=>{var g;(g=e.edges)!=null&&g.value&&Array.isArray(e.edges.value)&&(E?.pause(),e.edges.value=[...P],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},l=()=>{o.run(()=>{xe(()=>t.maxZoom,()=>{t.maxZoom&&He(t.maxZoom)&&n.setMaxZoom(t.maxZoom)},{immediate:!0})})},a=()=>{o.run(()=>{xe(()=>t.minZoom,()=>{t.minZoom&&He(t.minZoom)&&n.setMinZoom(t.minZoom)},{immediate:!0})})},u=()=>{o.run(()=>{xe(()=>t.translateExtent,()=>{t.translateExtent&&He(t.translateExtent)&&n.setTranslateExtent(t.translateExtent)},{immediate:!0})})},c=()=>{o.run(()=>{xe(()=>t.nodeExtent,()=>{t.nodeExtent&&He(t.nodeExtent)&&n.setNodeExtent(t.nodeExtent)},{immediate:!0})})},d=()=>{o.run(()=>{xe(()=>t.applyDefault,()=>{He(t.applyDefault)&&(n.applyDefault.value=t.applyDefault)},{immediate:!0})})},p=()=>{o.run(()=>{const E=async N=>{let M=N;typeof t.autoConnect=="function"&&(M=await t.autoConnect(N)),M!==!1&&n.addEdges([M])};xe(()=>t.autoConnect,()=>{He(t.autoConnect)&&(n.autoConnect.value=t.autoConnect)},{immediate:!0}),xe(n.autoConnect,(N,M,P)=>{N?n.onConnect(E):n.hooks.value.connect.off(E),P(()=>{n.hooks.value.connect.off(E)})},{immediate:!0})})},h=()=>{const E=["id","modelValue","translateExtent","nodeExtent","edges","nodes","maxZoom","minZoom","applyDefault","autoConnect"];for(const N of Object.keys(t)){const M=N;if(!E.includes(M)){const P=Ve(()=>t[M]),g=n[M];Oe(g)&&o.run(()=>{xe(P,_=>{He(_)&&(g.value=_)},{immediate:!0})})}}};(()=>{i(),s(),r(),a(),l(),u(),c(),d(),p(),h()})()}),()=>o.stop()}function e_(){return{edgesChange:re(),nodesChange:re(),nodeDoubleClick:re(),nodeClick:re(),nodeMouseEnter:re(),nodeMouseMove:re(),nodeMouseLeave:re(),nodeContextMenu:re(),nodeDragStart:re(),nodeDrag:re(),nodeDragStop:re(),nodesInitialized:re(),miniMapNodeClick:re(),miniMapNodeDoubleClick:re(),miniMapNodeMouseEnter:re(),miniMapNodeMouseMove:re(),miniMapNodeMouseLeave:re(),connect:re(),connectStart:re(),connectEnd:re(),clickConnectStart:re(),clickConnectEnd:re(),paneReady:re(),init:re(),move:re(),moveStart:re(),moveEnd:re(),selectionDragStart:re(),selectionDrag:re(),selectionDragStop:re(),selectionContextMenu:re(),selectionStart:re(),selectionEnd:re(),viewportChangeStart:re(),viewportChange:re(),viewportChangeEnd:re(),paneScroll:re(),paneClick:re(),paneContextMenu:re(),paneMouseEnter:re(),paneMouseMove:re(),paneMouseLeave:re(),edgeContextMenu:re(),edgeMouseEnter:re(),edgeMouseMove:re(),edgeMouseLeave:re(),edgeDoubleClick:re(),edgeClick:re(),edgeUpdateStart:re(),edgeUpdate:re(),edgeUpdateEnd:re(),updateNodeInternals:re(),error:re(e=>Ss(e.message))}}function t_(e,t){Au(()=>{for(const[n,o]of Object.entries(t.value)){const i=s=>{e(n,s)};o.fns.add(i),ms(()=>{o.off(i)})}})}function Ld(){return{vueFlowRef:null,viewportRef:null,nodes:[],edges:[],connectionLookup:new Map,nodeTypes:{},edgeTypes:{},initialized:!1,dimensions:{width:0,height:0},viewport:{x:0,y:0,zoom:1},d3Zoom:null,d3Selection:null,d3ZoomHandler:null,minZoom:.5,maxZoom:2,translateExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],nodeExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],selectionMode:sl.Full,paneDragging:!1,preventScrolling:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!0,panOnScroll:!1,panOnScrollSpeed:.5,panOnScrollMode:Vo.Free,paneClickDistance:0,panOnDrag:!0,edgeUpdaterRadius:10,onlyRenderVisibleElements:!1,defaultViewport:{x:0,y:0,zoom:1},nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,defaultMarkerColor:"#b1b1b7",connectionLineStyle:{},connectionLineType:null,connectionLineOptions:{type:An.Bezier,style:{}},connectionMode:Cn.Loose,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectionPosition:{x:Number.NaN,y:Number.NaN},connectionRadius:20,connectOnClick:!0,connectionStatus:null,isValidConnection:null,snapGrid:[15,15],snapToGrid:!1,edgesUpdatable:!1,edgesFocusable:!0,nodesFocusable:!0,nodesConnectable:!0,nodesDraggable:!0,nodeDragThreshold:1,elementsSelectable:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,selectionKeyCode:"Shift",multiSelectionKeyCode:qi()?"Meta":"Control",zoomActivationKeyCode:qi()?"Meta":"Control",deleteKeyCode:"Backspace",panActivationKeyCode:"Space",hooks:e_(),applyDefault:!0,autoConnect:!1,fitViewOnInit:!1,fitViewOnInitDone:!1,noDragClassName:"nodrag",noWheelClassName:"nowheel",noPanClassName:"nopan",defaultEdgeOptions:void 0,elevateEdgesOnSelect:!1,elevateNodesOnSelect:!0,autoPanOnNodeDrag:!0,autoPanOnConnect:!0,autoPanSpeed:15,disableKeyboardA11y:!1,ariaLiveMessage:""}}const n_=["id","vueFlowRef","viewportRef","initialized","modelValue","nodes","edges","maxZoom","minZoom","translateExtent","hooks","defaultEdgeOptions"];function o_(e,t,n){const o=J2(e),i=f=>{const v=f??[];e.hooks.updateNodeInternals.trigger(v)},s=f=>_2(f,e.nodes,e.edges),r=f=>y2(f,e.nodes,e.edges),l=f=>Td(f,e.edges),a=({id:f,type:v,nodeId:y})=>{var m;return Array.from(((m=e.connectionLookup.get(`${y}-${v}-${f??null}`))==null?void 0:m.values())??[])},u=f=>{if(f)return t.value.get(f)},c=f=>{if(f)return n.value.get(f)},d=(f,v,y)=>{var m,I;const B=[];for(const R of f){const A={id:R.id,type:"position",dragging:y,from:R.from};if(v&&(A.position=R.position,R.parentNode)){const q=u(R.parentNode);A.position={x:A.position.x-(((m=q?.computedPosition)==null?void 0:m.x)??0),y:A.position.y-(((I=q?.computedPosition)==null?void 0:I.y)??0)}}B.push(A)}B?.length&&e.hooks.nodesChange.trigger(B)},p=f=>{if(!e.vueFlowRef)return;const v=e.vueFlowRef.querySelector(".vue-flow__transformationpane");if(!v)return;const y=window.getComputedStyle(v),{m22:m}=new window.DOMMatrixReadOnly(y.transform),I=[];for(const B of f){const R=B,A=u(R.id);if(A){const q=xs(R.nodeElement);if(!!(q.width&&q.height&&(A.dimensions.width!==q.width||A.dimensions.height!==q.height||R.forceUpdate))){const ne=R.nodeElement.getBoundingClientRect();A.dimensions=q,A.handleBounds.source=Fa("source",R.nodeElement,ne,m,A.id),A.handleBounds.target=Fa("target",R.nodeElement,ne,m,A.id),I.push({id:A.id,type:"dimensions",dimensions:q})}}}!e.fitViewOnInitDone&&e.fitViewOnInit&&o.value.fitView().then(()=>{e.fitViewOnInitDone=!0}),I.length&&e.hooks.nodesChange.trigger(I)},h=(f,v)=>{const y=new Set,m=new Set;for(const R of f)zn(R)?y.add(R.id):Nn(R)&&m.add(R.id);const I=xn(t.value,y,!0),B=xn(n.value,m);if(e.multiSelectionActive){for(const R of y)I.push(_n(R,v));for(const R of m)B.push(_n(R,v))}I.length&&e.hooks.nodesChange.trigger(I),B.length&&e.hooks.edgesChange.trigger(B)},b=f=>{if(e.multiSelectionActive){const v=f.map(y=>_n(y.id,!0));e.hooks.nodesChange.trigger(v);return}e.hooks.nodesChange.trigger(xn(t.value,new Set(f.map(v=>v.id)),!0)),e.hooks.edgesChange.trigger(xn(n.value))},E=f=>{if(e.multiSelectionActive){const v=f.map(y=>_n(y.id,!0));e.hooks.edgesChange.trigger(v);return}e.hooks.edgesChange.trigger(xn(n.value,new Set(f.map(v=>v.id)))),e.hooks.nodesChange.trigger(xn(t.value,new Set,!0))},N=f=>{h(f,!0)},M=f=>{const y=(f||e.nodes).map(m=>(m.selected=!1,_n(m.id,!1)));e.hooks.nodesChange.trigger(y)},P=f=>{const y=(f||e.edges).map(m=>(m.selected=!1,_n(m.id,!1)));e.hooks.edgesChange.trigger(y)},g=f=>{if(!f||!f.length)return h([],!1);const v=f.reduce((y,m)=>{const I=_n(m.id,!1);return zn(m)?y.nodes.push(I):y.edges.push(I),y},{nodes:[],edges:[]});v.nodes.length&&e.hooks.nodesChange.trigger(v.nodes),v.edges.length&&e.hooks.edgesChange.trigger(v.edges)},_=f=>{var v;(v=e.d3Zoom)==null||v.scaleExtent([f,e.maxZoom]),e.minZoom=f},O=f=>{var v;(v=e.d3Zoom)==null||v.scaleExtent([e.minZoom,f]),e.maxZoom=f},U=f=>{var v;(v=e.d3Zoom)==null||v.translateExtent(f),e.translateExtent=f},X=f=>{e.nodeExtent=f,i()},H=f=>{var v;(v=e.d3Zoom)==null||v.clickDistance(f)},F=f=>{e.nodesDraggable=f,e.nodesConnectable=f,e.elementsSelectable=f},Z=f=>{const v=f instanceof Function?f(e.nodes):f;!e.initialized&&!v.length||(e.nodes=za(v,u,e.hooks.error.trigger))},j=f=>{const v=f instanceof Function?f(e.edges):f;if(!e.initialized&&!v.length)return;const y=Zs(v,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);Ws(e.connectionLookup,n.value,y),e.edges=y},C=f=>{const v=f instanceof Function?f([...e.nodes,...e.edges]):f;!e.initialized&&!v.length||(Z(v.filter(zn)),j(v.filter(Nn)))},ee=f=>{let v=f instanceof Function?f(e.nodes):f;v=Array.isArray(v)?v:[v];const y=za(v,u,e.hooks.error.trigger),m=[];for(const I of y)m.push(Aa(I));m.length&&e.hooks.nodesChange.trigger(m)},T=f=>{let v=f instanceof Function?f(e.edges):f;v=Array.isArray(v)?v:[v];const y=Zs(v,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges),m=[];for(const I of y)m.push(Aa(I));m.length&&e.hooks.edgesChange.trigger(m)},G=(f,v=!0,y=!1)=>{const m=f instanceof Function?f(e.nodes):f,I=Array.isArray(m)?m:[m],B=[],R=[];function A(K){const ne=l(K);for(const se of ne)(!He(se.deletable)||se.deletable)&&R.push(Oa(se.id,se.source,se.target,se.sourceHandle,se.targetHandle))}function q(K){const ne=[];for(const se of e.nodes)se.parentNode===K&&ne.push(se);if(ne.length){for(const se of ne)B.push(Da(se.id));v&&A(ne);for(const se of ne)q(se.id)}}for(const K of I){const ne=typeof K=="string"?u(K):K;ne&&(He(ne.deletable)&&!ne.deletable||(B.push(Da(ne.id)),v&&A([ne]),y&&q(ne.id)))}R.length&&e.hooks.edgesChange.trigger(R),B.length&&e.hooks.nodesChange.trigger(B)},k=f=>{const v=f instanceof Function?f(e.edges):f,y=Array.isArray(v)?v:[v],m=[];for(const I of y){const B=typeof I=="string"?c(I):I;B&&(He(B.deletable)&&!B.deletable||m.push(Oa(typeof I=="string"?I:I.id,B.source,B.target,B.sourceHandle,B.targetHandle)))}e.hooks.edgesChange.trigger(m)},L=(f,v,y=!0)=>{const m=c(f.id);if(!m)return!1;const I=e.edges.indexOf(m),B=z2(f,v,m,y,e.hooks.error.trigger);if(B){const[R]=Zs([B],e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);return e.edges=e.edges.map((A,q)=>q===I?R:A),Ws(e.connectionLookup,n.value,[R]),R}return!1},$=(f,v,y={replace:!1})=>{const m=c(f);if(!m)return;const I=typeof v=="function"?v(m):v;m.data=y.replace?I:{...m.data,...I}},D=f=>Pa(f,e.nodes),V=f=>{const v=Pa(f,e.edges);return Ws(e.connectionLookup,n.value,v),v},Y=(f,v,y={replace:!1})=>{const m=u(f);if(!m)return;const I=typeof v=="function"?v(m):v;y.replace?e.nodes.splice(e.nodes.indexOf(m),1,I):Object.assign(m,I)},J=(f,v,y={replace:!1})=>{const m=u(f);if(!m)return;const I=typeof v=="function"?v(m):v;m.data=y.replace?I:{...m.data,...I}},ue=(f,v,y=!1)=>{y?e.connectionClickStartHandle=f:e.connectionStartHandle=f,e.connectionEndHandle=null,e.connectionStatus=null,v&&(e.connectionPosition=v)},Q=(f,v=null,y=null)=>{e.connectionStartHandle&&(e.connectionPosition=f,e.connectionEndHandle=v,e.connectionStatus=y)},ie=(f,v)=>{e.connectionPosition={x:Number.NaN,y:Number.NaN},e.connectionEndHandle=null,e.connectionStatus=null,v?e.connectionClickStartHandle=null:e.connectionStartHandle=null},le=f=>{const v=v2(f),y=v?null:Co(f)?f:u(f.id);return!v&&!y?[null,null,v]:[v?f:Wi(y),y,v]},me=(f,v=!0,y=e.nodes)=>{const[m,I,B]=le(f);if(!m)return[];const R=[];for(const A of y||e.nodes){if(!B&&(A.id===I.id||!A.computedPosition))continue;const q=Wi(A),K=Zi(q,m);(v&&K>0||K>=Number(m.width)*Number(m.height))&&R.push(A)}return R},be=(f,v,y=!0)=>{const[m]=le(f);if(!m)return!1;const I=Zi(m,v);return y&&I>0||I>=Number(m.width)*Number(m.height)},fe=f=>{const{viewport:v,dimensions:y,d3Zoom:m,d3Selection:I,translateExtent:B}=e;if(!m||!I||!f.x&&!f.y)return!1;const R=fo.translate(v.x+f.x,v.y+f.y).scale(v.zoom),A=[[0,0],[y.width,y.height]],q=m.constrain()(R,A,B),K=e.viewport.x!==q.x||e.viewport.y!==q.y||e.viewport.zoom!==q.k;return m.transform(I,q),K},we=f=>{const v=f instanceof Function?f(e):f,y=["d3Zoom","d3Selection","d3ZoomHandler","viewportRef","vueFlowRef","dimensions","hooks"];He(v.defaultEdgeOptions)&&(e.defaultEdgeOptions=v.defaultEdgeOptions);const m=v.modelValue||v.nodes||v.edges?[]:void 0;m&&(v.modelValue&&m.push(...v.modelValue),v.nodes&&m.push(...v.nodes),v.edges&&m.push(...v.edges),C(m));const I=()=>{He(v.maxZoom)&&O(v.maxZoom),He(v.minZoom)&&_(v.minZoom),He(v.translateExtent)&&U(v.translateExtent)};for(const B of Object.keys(v)){const R=B,A=v[R];![...n_,...y].includes(R)&&He(A)&&(e[R]=A)}mr(()=>e.d3Zoom).not.toBeNull().then(I),e.initialized||(e.initialized=!0)};return{updateNodePositions:d,updateNodeDimensions:p,setElements:C,setNodes:Z,setEdges:j,addNodes:ee,addEdges:T,removeNodes:G,removeEdges:k,findNode:u,findEdge:c,updateEdge:L,updateEdgeData:$,updateNode:Y,updateNodeData:J,applyEdgeChanges:V,applyNodeChanges:D,addSelectedElements:N,addSelectedNodes:b,addSelectedEdges:E,setMinZoom:_,setMaxZoom:O,setTranslateExtent:U,setNodeExtent:X,setPaneClickDistance:H,removeSelectedElements:g,removeSelectedNodes:M,removeSelectedEdges:P,startConnection:ue,updateConnection:Q,endConnection:ie,setInteractive:F,setState:we,getIntersectingNodes:me,getIncomers:s,getOutgoers:r,getConnectedEdges:l,getHandleConnections:a,isNodeIntersecting:be,panBy:fe,fitView:f=>o.value.fitView(f),zoomIn:f=>o.value.zoomIn(f),zoomOut:f=>o.value.zoomOut(f),zoomTo:(f,v)=>o.value.zoomTo(f,v),setViewport:(f,v)=>o.value.setViewport(f,v),setTransform:(f,v)=>o.value.setTransform(f,v),getViewport:()=>o.value.getViewport(),getTransform:()=>o.value.getTransform(),setCenter:(f,v,y)=>o.value.setCenter(f,v,y),fitBounds:(f,v)=>o.value.fitBounds(f,v),project:f=>o.value.project(f),screenToFlowCoordinate:f=>o.value.screenToFlowCoordinate(f),flowToScreenCoordinate:f=>o.value.flowToScreenCoordinate(f),toObject:()=>{const f=[],v=[];for(const y of e.nodes){const{computedPosition:m,handleBounds:I,selected:B,dimensions:R,isParent:A,resizing:q,dragging:K,events:ne,...se}=y;f.push(se)}for(const y of e.edges){const{selected:m,sourceNode:I,targetNode:B,events:R,...A}=y;v.push(A)}return JSON.parse(JSON.stringify({nodes:f,edges:v,position:[e.viewport.x,e.viewport.y],zoom:e.viewport.zoom,viewport:e.viewport}))},fromObject:f=>new Promise(v=>{const{nodes:y,edges:m,position:I,zoom:B,viewport:R}=f;if(y&&Z(y),m&&j(m),R?.x&&R?.y||I){const A=R?.x||I[0],q=R?.y||I[1],K=R?.zoom||B||e.viewport.zoom;return mr(()=>o.value.viewportInitialized).toBe(!0).then(()=>{o.value.setViewport({x:A,y:q,zoom:K}).then(()=>{v(!0)})})}else v(!0)}),updateNodeInternals:i,viewportHelper:o,$reset:()=>{const f=Ld();if(e.edges=[],e.nodes=[],e.d3Zoom&&e.d3Selection){const v=fo.translate(f.defaultViewport.x??0,f.defaultViewport.y??0).scale(Yn(f.defaultViewport.zoom??1,f.minZoom,f.maxZoom)),y=e.viewportRef.getBoundingClientRect(),m=[[0,0],[y.width,y.height]],I=e.d3Zoom.constrain()(v,m,f.translateExtent);e.d3Zoom.transform(e.d3Selection,I)}we(f)},$destroy:()=>{}}}const i_=["data-id","data-handleid","data-nodeid","data-handlepos"],s_={name:"Handle",compatConfig:{MODE:3}},Ji=he({...s_,props:{id:{default:null},type:{},position:{default:()=>ae.Top},isValidConnection:{type:Function},connectable:{type:[Boolean,Number,String,Function],default:void 0},connectableStart:{type:Boolean,default:!0},connectableEnd:{type:Boolean,default:!0}},setup(e,{expose:t}){const n=ih(e,["position","connectable","connectableStart","connectableEnd","id"]),o=Ve(()=>n.type??"source"),i=Ve(()=>n.isValidConnection??null),{id:s,connectionStartHandle:r,connectionClickStartHandle:l,connectionEndHandle:a,vueFlowRef:u,nodesConnectable:c,noDragClassName:d,noPanClassName:p}=Fe(),{id:h,node:b,nodeEl:E,connectedEdges:N}=Vd(),M=te(),P=Ve(()=>typeof e.connectableStart<"u"?e.connectableStart:!0),g=Ve(()=>typeof e.connectableEnd<"u"?e.connectableEnd:!0),_=Ve(()=>{var j,C,ee,T,G,k;return((j=r.value)==null?void 0:j.nodeId)===h&&((C=r.value)==null?void 0:C.id)===e.id&&((ee=r.value)==null?void 0:ee.type)===o.value||((T=a.value)==null?void 0:T.nodeId)===h&&((G=a.value)==null?void 0:G.id)===e.id&&((k=a.value)==null?void 0:k.type)===o.value}),O=Ve(()=>{var j,C,ee;return((j=l.value)==null?void 0:j.nodeId)===h&&((C=l.value)==null?void 0:C.id)===e.id&&((ee=l.value)==null?void 0:ee.type)===o.value}),{handlePointerDown:U,handleClick:X}=Rd({nodeId:h,handleId:e.id,isValidConnection:i,type:o}),H=pe(()=>typeof e.connectable=="string"&&e.connectable==="single"?!N.value.some(j=>{const C=j[`${o.value}Handle`];return j[o.value]!==h?!1:C?C===e.id:!0}):typeof e.connectable=="number"?N.value.filter(j=>{const C=j[`${o.value}Handle`];return j[o.value]!==h?!1:C?C===e.id:!0}).length{var j;if(!b.dimensions.width||!b.dimensions.height)return;const C=(j=b.handleBounds[o.value])==null?void 0:j.find(D=>D.id===e.id);if(!u.value||C)return;const ee=u.value.querySelector(".vue-flow__transformationpane");if(!E.value||!M.value||!ee||!e.id)return;const T=E.value.getBoundingClientRect(),G=M.value.getBoundingClientRect(),k=window.getComputedStyle(ee),{m22:L}=new window.DOMMatrixReadOnly(k.transform),$={id:e.id,position:e.position,x:(G.left-T.left)/L,y:(G.top-T.top)/L,type:o.value,nodeId:h,...xs(M.value)};b.handleBounds[o.value]=[...b.handleBounds[o.value]??[],$]});function F(j){const C=ll(j);H.value&&P.value&&(C&&j.button===0||!C)&&U(j)}function Z(j){!h||!l.value&&!P.value||H.value&&X(j)}return t({handleClick:X,handlePointerDown:U,onClick:Z,onPointerDown:F}),(j,C)=>(z(),W("div",{ref_key:"handle",ref:M,"data-id":`${oe(s)}-${oe(h)}-${e.id}-${o.value}`,"data-handleid":e.id,"data-nodeid":oe(h),"data-handlepos":j.position,class:ze(["vue-flow__handle",[`vue-flow__handle-${j.position}`,`vue-flow__handle-${e.id}`,oe(d),oe(p),o.value,{connectable:H.value,connecting:O.value,connectablestart:P.value,connectableend:g.value,connectionindicator:H.value&&(P.value&&!_.value||g.value&&_.value)}]]),onMousedown:F,onTouchstartPassive:F,onClick:Z},[Ct(j.$slots,"default",{id:j.id})],42,i_))}}),Ns=function({sourcePosition:e=ae.Bottom,targetPosition:t=ae.Top,label:n,connectable:o=!0,isValidTargetPos:i,isValidSourcePos:s,data:r}){const l=r.label??n;return[Ie(Ji,{type:"target",position:t,connectable:o,isValidConnection:i}),typeof l!="string"&&l?Ie(l):Ie(_e,[l]),Ie(Ji,{type:"source",position:e,connectable:o,isValidConnection:s})]};Ns.props=["sourcePosition","targetPosition","label","isValidTargetPos","isValidSourcePos","connectable","data"];Ns.inheritAttrs=!1;Ns.compatConfig={MODE:3};const r_=Ns,Ts=function({targetPosition:e=ae.Top,label:t,connectable:n=!0,isValidTargetPos:o,data:i}){const s=i.label??t;return[Ie(Ji,{type:"target",position:e,connectable:n,isValidConnection:o}),typeof s!="string"&&s?Ie(s):Ie(_e,[s])]};Ts.props=["targetPosition","label","isValidTargetPos","connectable","data"];Ts.inheritAttrs=!1;Ts.compatConfig={MODE:3};const l_=Ts,Ms=function({sourcePosition:e=ae.Bottom,label:t,connectable:n=!0,isValidSourcePos:o,data:i}){const s=i.label??t;return[typeof s!="string"&&s?Ie(s):Ie(_e,[s]),Ie(Ji,{type:"source",position:e,connectable:n,isValidConnection:o})]};Ms.props=["sourcePosition","label","isValidSourcePos","connectable","data"];Ms.inheritAttrs=!1;Ms.compatConfig={MODE:3};const a_=Ms,u_=["transform"],c_=["width","height","x","y","rx","ry"],d_=["y"],f_={name:"EdgeText",compatConfig:{MODE:3}},h_=he({...f_,props:{x:{},y:{},label:{},labelStyle:{default:()=>({})},labelShowBg:{type:Boolean,default:!0},labelBgStyle:{default:()=>({})},labelBgPadding:{default:()=>[2,4]},labelBgBorderRadius:{default:2}},setup(e){const t=te({x:0,y:0,width:0,height:0}),n=te(null),o=pe(()=>`translate(${e.x-t.value.width/2} ${e.y-t.value.height/2})`);ut(i),xe([()=>e.x,()=>e.y,n,()=>e.label],i);function i(){if(!n.value)return;const s=n.value.getBBox();(s.width!==t.value.width||s.height!==t.value.height)&&(t.value=s)}return(s,r)=>(z(),W("g",{transform:o.value,class:"vue-flow__edge-textwrapper"},[s.labelShowBg?(z(),W("rect",{key:0,class:"vue-flow__edge-textbg",width:`${t.value.width+2*s.labelBgPadding[0]}px`,height:`${t.value.height+2*s.labelBgPadding[1]}px`,x:-s.labelBgPadding[0],y:-s.labelBgPadding[1],style:at(s.labelBgStyle),rx:s.labelBgBorderRadius,ry:s.labelBgBorderRadius},null,12,c_)):Ne("",!0),x("text",Mn(s.$attrs,{ref_key:"el",ref:n,class:"vue-flow__edge-text",y:t.value.height/2,dy:"0.3em",style:s.labelStyle}),[Ct(s.$slots,"default",{},()=>[typeof s.label!="string"?(z(),Re(vo(s.label),{key:0})):(z(),W(_e,{key:1},[Be(Ae(s.label),1)],64))])],16,d_)],8,u_))}}),p_=["id","d","marker-end","marker-start"],g_=["d","stroke-width"],v_={name:"BaseEdge",inheritAttrs:!1,compatConfig:{MODE:3}},$s=he({...v_,props:{id:{},labelX:{},labelY:{},path:{},label:{},markerStart:{},markerEnd:{},interactionWidth:{default:20},labelStyle:{},labelShowBg:{type:Boolean},labelBgStyle:{},labelBgPadding:{},labelBgBorderRadius:{}},setup(e,{expose:t}){const n=te(null),o=te(null),i=te(null),s=oh();return t({pathEl:n,interactionEl:o,labelEl:i}),(r,l)=>(z(),W(_e,null,[x("path",Mn(oe(s),{id:r.id,ref_key:"pathEl",ref:n,d:r.path,class:"vue-flow__edge-path","marker-end":r.markerEnd,"marker-start":r.markerStart}),null,16,p_),r.interactionWidth?(z(),W("path",{key:0,ref_key:"interactionEl",ref:o,fill:"none",d:r.path,"stroke-width":r.interactionWidth,"stroke-opacity":0,class:"vue-flow__edge-interaction"},null,8,g_)):Ne("",!0),r.label&&r.labelX&&r.labelY?(z(),Re(h_,{key:1,ref_key:"labelEl",ref:i,x:r.labelX,y:r.labelY,label:r.label,"label-show-bg":r.labelShowBg,"label-bg-style":r.labelBgStyle,"label-bg-padding":r.labelBgPadding,"label-bg-border-radius":r.labelBgBorderRadius,"label-style":r.labelStyle},null,8,["x","y","label","label-show-bg","label-bg-style","label-bg-padding","label-bg-border-radius","label-style"])):Ne("",!0)],64))}});function Fd({sourceX:e,sourceY:t,targetX:n,targetY:o}){const i=Math.abs(n-e)/2,s=n=0?.5*e:t*25*Math.sqrt(-e)}function ja({pos:e,x1:t,y1:n,x2:o,y2:i,c:s}){let r,l;switch(e){case ae.Left:r=t-bi(t-o,s),l=n;break;case ae.Right:r=t+bi(o-t,s),l=n;break;case ae.Top:r=t,l=n-bi(n-i,s);break;case ae.Bottom:r=t,l=n+bi(i-n,s);break}return[r,l]}function Hd(e){const{sourceX:t,sourceY:n,sourcePosition:o=ae.Bottom,targetX:i,targetY:s,targetPosition:r=ae.Top,curvature:l=.25}=e,[a,u]=ja({pos:o,x1:t,y1:n,x2:i,y2:s,c:l}),[c,d]=ja({pos:r,x1:i,y1:s,x2:t,y2:n,c:l}),[p,h,b,E]=zd({sourceX:t,sourceY:n,targetX:i,targetY:s,sourceControlX:a,sourceControlY:u,targetControlX:c,targetControlY:d});return[`M${t},${n} C${a},${u} ${c},${d} ${i},${s}`,p,h,b,E]}function Ya({pos:e,x1:t,y1:n,x2:o,y2:i}){let s,r;switch(e){case ae.Left:case ae.Right:s=.5*(t+o),r=n;break;case ae.Top:case ae.Bottom:s=t,r=.5*(n+i);break}return[s,r]}function Ud(e){const{sourceX:t,sourceY:n,sourcePosition:o=ae.Bottom,targetX:i,targetY:s,targetPosition:r=ae.Top}=e,[l,a]=Ya({pos:o,x1:t,y1:n,x2:i,y2:s}),[u,c]=Ya({pos:r,x1:i,y1:s,x2:t,y2:n}),[d,p,h,b]=zd({sourceX:t,sourceY:n,targetX:i,targetY:s,sourceControlX:l,sourceControlY:a,targetControlX:u,targetControlY:c});return[`M${t},${n} C${l},${a} ${u},${c} ${i},${s}`,d,p,h,b]}const Ka={[ae.Left]:{x:-1,y:0},[ae.Right]:{x:1,y:0},[ae.Top]:{x:0,y:-1},[ae.Bottom]:{x:0,y:1}};function m_({source:e,sourcePosition:t=ae.Bottom,target:n}){return t===ae.Left||t===ae.Right?e.xe[d]?-1:1)*T:M[d]=(u[d]>n[d]?-1:1)*T}}if(t!==o){const ee=d==="x"?"y":"x",T=r[d]===l[ee],G=a[ee]>u[ee],k=a[ee]=C?(b=(F.x+Z.x)/2,E=h[0].y):(b=h[0].x,E=(F.y+Z.y)/2)}return[[e,{x:a.x+N.x,y:a.y+N.y},...h,{x:u.x+M.x,y:u.y+M.y},n],b,E,_,O]}function __(e,t,n,o){const i=Math.min(Xa(e,t)/2,Xa(t,n)/2,o),{x:s,y:r}=t;if(e.x===s&&s===n.x||e.y===r&&r===n.y)return`L${s} ${r}`;if(e.y===r){const u=e.x{let _;return g>0&&g{const[n,o,i]=b_(e);return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),x_=w_,E_=he({name:"SmoothStepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","borderRadius","markerEnd","markerStart","interactionWidth","offset"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=kr({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),Gd=E_,S_=he({name:"StepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],setup(e,{attrs:t}){return()=>Ie(Gd,{...e,...t,borderRadius:0})}}),C_=S_,N_=he({name:"BezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","curvature","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=Hd({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),T_=N_,M_=he({name:"SimpleBezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=Ud({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),$_=M_,I_={input:a_,default:r_,output:l_},k_={default:T_,straight:x_,step:C_,smoothstep:Gd,simplebezier:$_};function P_(e,t,n){const o=pe(()=>E=>t.value.get(E)),i=pe(()=>E=>n.value.get(E)),s=pe(()=>{const E={...k_,...e.edgeTypes},N=Object.keys(E);for(const M of e.edges)M.type&&!N.includes(M.type)&&(E[M.type]=M.type);return E}),r=pe(()=>{const E={...I_,...e.nodeTypes},N=Object.keys(E);for(const M of e.nodes)M.type&&!N.includes(M.type)&&(E[M.type]=M.type);return E}),l=pe(()=>e.onlyRenderVisibleElements?Nd(e.nodes,{x:0,y:0,width:e.dimensions.width,height:e.dimensions.height},e.viewport,!0):e.nodes),a=pe(()=>{if(e.onlyRenderVisibleElements){const E=[];for(const N of e.edges){const M=t.value.get(N.source),P=t.value.get(N.target);M2({sourcePos:M.computedPosition||{x:0,y:0},targetPos:P.computedPosition||{x:0,y:0},sourceWidth:M.dimensions.width,sourceHeight:M.dimensions.height,targetWidth:P.dimensions.width,targetHeight:P.dimensions.height,width:e.dimensions.width,height:e.dimensions.height,viewport:e.viewport})&&E.push(N)}return E}return e.edges}),u=pe(()=>[...l.value,...a.value]),c=pe(()=>{const E=[];for(const N of e.nodes)N.selected&&E.push(N);return E}),d=pe(()=>{const E=[];for(const N of e.edges)N.selected&&E.push(N);return E}),p=pe(()=>[...c.value,...d.value]),h=pe(()=>{const E=[];for(const N of e.nodes)N.dimensions.width&&N.dimensions.height&&N.handleBounds!==void 0&&E.push(N);return E}),b=pe(()=>l.value.length>0&&h.value.length===l.value.length);return{getNode:o,getEdge:i,getElements:u,getEdgeTypes:s,getNodeTypes:r,getEdges:a,getNodes:l,getSelectedElements:p,getSelectedNodes:c,getSelectedEdges:d,getNodesInitialized:h,areNodesInitialized:b}}class Dn{constructor(){this.currentId=0,this.flows=new Map}static getInstance(){var t;const n=(t=Xt())==null?void 0:t.appContext.app,o=n?.config.globalProperties.$vueFlowStorage??Dn.instance;return Dn.instance=o??new Dn,n&&(n.config.globalProperties.$vueFlowStorage=Dn.instance),Dn.instance}set(t,n){return this.flows.set(t,n)}get(t){return this.flows.get(t)}remove(t){return this.flows.delete(t)}create(t,n){const o=Ld(),i=go(o),s={};for(const[p,h]of Object.entries(i.hooks)){const b=`on${p.charAt(0).toUpperCase()+p.slice(1)}`;s[b]=h.on}const r={};for(const[p,h]of Object.entries(i.hooks))r[p]=h.trigger;const l=pe(()=>{const p=new Map;for(const h of i.nodes)p.set(h.id,h);return p}),a=pe(()=>{const p=new Map;for(const h of i.edges)p.set(h.id,h);return p}),u=P_(i,l,a),c=o_(i,l,a);c.setState({...i,...n});const d={...s,...u,...c,...Cm(i),nodeLookup:l,edgeLookup:a,emits:r,id:t,vueFlowVersion:"1.45.0",$destroy:()=>{this.remove(t)}};return this.set(t,d),d}getId(){return`vue-flow-${this.currentId++}`}}function Fe(e){const t=Dn.getInstance(),n=is(),o=typeof e=="object",i=o?e:{id:e},s=i.id,r=s??n?.vueFlowId;let l;if(n){const a=mt(Ga,null);typeof a<"u"&&a!==null&&(!r||a.id===r)&&(l=a)}if(l||r&&(l=t.get(r)),!l||r&&l.id!==r){const a=s??t.getId(),u=t.create(a,i);l=u,(n??os(!0)).run(()=>{xe(u.applyDefault,(d,p,h)=>{const b=N=>{u.applyNodeChanges(N)},E=N=>{u.applyEdgeChanges(N)};d?(u.onNodesChange(b),u.onEdgesChange(E)):(u.hooks.value.nodesChange.off(b),u.hooks.value.edgesChange.off(E)),h(()=>{u.hooks.value.nodesChange.off(b),u.hooks.value.edgesChange.off(E)})},{immediate:!0}),ms(()=>{if(l){const d=t.get(l.id);d?d.$destroy():Ss(`No store instance found for id ${l.id} in storage.`)}})})}else o&&l.setState(i);if(n&&(Hn(Ga,l),n.vueFlowId=l.id),o){const a=Xt();a?.type.name!=="VueFlow"&&l.emits.error(new Ge(Ue.USEVUEFLOW_OPTIONS))}return l}function A_(e){const{emits:t,dimensions:n}=Fe();let o;ut(()=>{const i=e.value,s=()=>{if(!i)return;const r=xs(i);(r.width===0||r.height===0)&&t.error(new Ge(Ue.MISSING_VIEWPORT_DIMENSIONS)),n.value={width:r.width||500,height:r.height||500}};s(),window.addEventListener("resize",s),i&&(o=new ResizeObserver(()=>s()),o.observe(i)),us(()=>{window.removeEventListener("resize",s),o&&i&&o.unobserve(i)})})}const D_={name:"UserSelection",compatConfig:{MODE:3}},O_=he({...D_,props:{userSelectionRect:{}},setup(e){return(t,n)=>(z(),W("div",{class:"vue-flow__selection vue-flow__container",style:at({width:`${t.userSelectionRect.width}px`,height:`${t.userSelectionRect.height}px`,transform:`translate(${t.userSelectionRect.x}px, ${t.userSelectionRect.y}px)`})},null,4))}}),R_=["tabIndex"],V_={name:"NodesSelection",compatConfig:{MODE:3}},B_=he({...V_,setup(e){const{emits:t,viewport:n,getSelectedNodes:o,noPanClassName:i,disableKeyboardA11y:s,userSelectionActive:r}=Fe(),l=Bd(),a=te(null),u=Od({el:a,onStart(b){t.selectionDragStart(b)},onDrag(b){t.selectionDrag(b)},onStop(b){t.selectionDragStop(b)}});ut(()=>{var b;s.value||(b=a.value)==null||b.focus({preventScroll:!0})});const c=pe(()=>Cd(o.value)),d=pe(()=>({width:`${c.value.width}px`,height:`${c.value.height}px`,top:`${c.value.y}px`,left:`${c.value.x}px`}));function p(b){t.selectionContextMenu({event:b,nodes:o.value})}function h(b){s||so[b.key]&&(b.preventDefault(),l({x:so[b.key].x,y:so[b.key].y},b.shiftKey))}return(b,E)=>!oe(r)&&c.value.width&&c.value.height?(z(),W("div",{key:0,class:ze(["vue-flow__nodesselection vue-flow__container",oe(i)]),style:at({transform:`translate(${oe(n).x}px,${oe(n).y}px) scale(${oe(n).zoom})`})},[x("div",{ref_key:"el",ref:a,class:ze([{dragging:oe(u)},"vue-flow__nodesselection-rect"]),style:at(d.value),tabIndex:oe(s)?void 0:-1,onContextmenu:p,onKeydown:h},null,46,R_)],6)):Ne("",!0)}});function L_(e,t){return{x:e.clientX-t.left,y:e.clientY-t.top}}const F_={name:"Pane",compatConfig:{MODE:3}},z_=he({...F_,props:{isSelecting:{type:Boolean},selectionKeyPressed:{type:Boolean}},setup(e){const{vueFlowRef:t,nodes:n,viewport:o,emits:i,userSelectionActive:s,removeSelectedElements:r,userSelectionRect:l,elementsSelectable:a,nodesSelectionActive:u,getSelectedEdges:c,getSelectedNodes:d,removeNodes:p,removeEdges:h,selectionMode:b,deleteKeyCode:E,multiSelectionKeyCode:N,multiSelectionActive:M,edgeLookup:P,nodeLookup:g,connectionLookup:_,defaultEdgeOptions:O,connectionStartHandle:U}=Fe(),X=te(null),H=te(new Set),F=te(new Set),Z=te(),j=Ve(()=>a.value&&(e.isSelecting||s.value)),C=Ve(()=>U.value!==null);let ee=!1,T=!1;const G=Bo(E,{actInsideInputWithModifier:!1}),k=Bo(N);xe(G,Q=>{Q&&(p(d.value),h(c.value),u.value=!1)}),xe(k,Q=>{M.value=Q});function L(Q,ie){return le=>{le.target===ie&&Q?.(le)}}function $(Q){if(ee||C.value){ee=!1;return}i.paneClick(Q),r(),u.value=!1}function D(Q){Q.preventDefault(),Q.stopPropagation(),i.paneContextMenu(Q)}function V(Q){i.paneScroll(Q)}function Y(Q){var ie,le,me;if(Z.value=(ie=t.value)==null?void 0:ie.getBoundingClientRect(),!a.value||!e.isSelecting||Q.button!==0||Q.target!==X.value||!Z.value)return;(me=(le=Q.target)==null?void 0:le.setPointerCapture)==null||me.call(le,Q.pointerId);const{x:be,y:fe}=L_(Q,Z.value);T=!0,ee=!1,r(),l.value={width:0,height:0,startX:be,startY:fe,x:be,y:fe},i.selectionStart(Q)}function J(Q){var ie;if(!Z.value||!l.value)return;ee=!0;const{x:le,y:me}=Bt(Q,Z.value),{startX:be=0,startY:fe=0}=l.value,we={startX:be,startY:fe,x:lef.id)),F.value=new Set;const S=((ie=O.value)==null?void 0:ie.selectable)??!0;for(const f of H.value){const v=_.value.get(f);if(v)for(const{edgeId:y}of v.values()){const m=P.value.get(y);m&&(m.selectable??S)&&F.value.add(y)}}if(!Ua(de,H.value)){const f=xn(g.value,H.value,!0);i.nodesChange(f)}if(!Ua(w,F.value)){const f=xn(P.value,F.value);i.edgesChange(f)}l.value=we,s.value=!0,u.value=!1}function ue(Q){var ie;Q.button!==0||!T||((ie=Q.target)==null||ie.releasePointerCapture(Q.pointerId),!s.value&&l.value&&Q.target===X.value&&$(Q),s.value=!1,l.value=null,u.value=H.value.size>0,i.selectionEnd(Q),e.selectionKeyPressed&&(ee=!1),T=!1)}return(Q,ie)=>(z(),W("div",{ref_key:"container",ref:X,class:ze(["vue-flow__pane vue-flow__container",{selection:Q.isSelecting}]),onClick:ie[0]||(ie[0]=le=>j.value?void 0:L($,X.value)(le)),onContextmenu:ie[1]||(ie[1]=le=>L(D,X.value)(le)),onWheelPassive:ie[2]||(ie[2]=le=>L(V,X.value)(le)),onPointerenter:ie[3]||(ie[3]=le=>j.value?void 0:oe(i).paneMouseEnter(le)),onPointerdown:ie[4]||(ie[4]=le=>j.value?Y(le):oe(i).paneMouseMove(le)),onPointermove:ie[5]||(ie[5]=le=>j.value?J(le):oe(i).paneMouseMove(le)),onPointerup:ie[6]||(ie[6]=le=>j.value?ue(le):void 0),onPointerleave:ie[7]||(ie[7]=le=>oe(i).paneMouseLeave(le))},[Ct(Q.$slots,"default"),oe(s)&&oe(l)?(z(),Re(O_,{key:0,"user-selection-rect":oe(l)},null,8,["user-selection-rect"])):Ne("",!0),oe(u)&&oe(d).length?(z(),Re(B_,{key:1})):Ne("",!0)],34))}}),H_={name:"Transform",compatConfig:{MODE:3}},U_=he({...H_,setup(e){const{viewport:t,fitViewOnInit:n,fitViewOnInitDone:o}=Fe(),i=pe(()=>n.value?!o.value:!1),s=pe(()=>`translate(${t.value.x}px,${t.value.y}px) scale(${t.value.zoom})`);return(r,l)=>(z(),W("div",{class:"vue-flow__transformationpane vue-flow__container",style:at({transform:s.value,opacity:i.value?0:void 0})},[Ct(r.$slots,"default")],4))}}),G_={name:"Viewport",compatConfig:{MODE:3}},j_=he({...G_,setup(e){const{minZoom:t,maxZoom:n,defaultViewport:o,translateExtent:i,zoomActivationKeyCode:s,selectionKeyCode:r,panActivationKeyCode:l,panOnScroll:a,panOnScrollMode:u,panOnScrollSpeed:c,panOnDrag:d,zoomOnDoubleClick:p,zoomOnPinch:h,zoomOnScroll:b,preventScrolling:E,noWheelClassName:N,noPanClassName:M,emits:P,connectionStartHandle:g,userSelectionActive:_,paneDragging:O,d3Zoom:U,d3Selection:X,d3ZoomHandler:H,viewport:F,viewportRef:Z,paneClickDistance:j}=Fe();A_(Z);const C=zo(!1),ee=zo(!1);let T=null,G=!1,k=0,L={x:0,y:0,zoom:0};const $=Bo(l),D=Bo(r),V=Bo(s),Y=Ve(()=>(!D.value||D.value&&r.value===!0)&&($.value||d.value)),J=Ve(()=>$.value||a.value),ue=Ve(()=>D.value||r.value===!0&&Y.value!==!0);ut(()=>{if(!Z.value){Ss("Viewport element is missing");return}const fe=Z.value,we=fe.getBoundingClientRect(),de=u2().clickDistance(j.value).scaleExtent([t.value,n.value]).translateExtent(i.value),w=wt(fe).call(de),S=w.on("wheel.zoom"),f=fo.translate(o.value.x??0,o.value.y??0).scale(Yn(o.value.zoom??1,t.value,n.value)),v=[[0,0],[we.width,we.height]],y=de.constrain()(f,v,i.value);de.transform(w,y),de.wheelDelta(ie),U.value=de,X.value=w,H.value=S,F.value={x:y.x,y:y.y,zoom:y.k},de.on("start",m=>{var I;if(!m.sourceEvent)return null;k=m.sourceEvent.button,C.value=!0;const B=me(m.transform);((I=m.sourceEvent)==null?void 0:I.type)==="mousedown"&&(O.value=!0),L=B,P.viewportChangeStart(B),P.moveStart({event:m,flowTransform:B})}),de.on("end",m=>{if(!m.sourceEvent)return null;if(C.value=!1,O.value=!1,Q(Y.value,k??0)&&!G&&P.paneContextMenu(m.sourceEvent),G=!1,le(L,m.transform)){const I=me(m.transform);L=I,P.viewportChangeEnd(I),P.moveEnd({event:m,flowTransform:I})}}),de.filter(m=>{var I;const B=V.value||b.value,R=h.value&&m.ctrlKey,A=m.button;if(A===1&&m.type==="mousedown"&&(be(m,"vue-flow__node")||be(m,"vue-flow__edge")))return!0;if(!Y.value&&!B&&!J.value&&!p.value&&!h.value||_.value||!p.value&&m.type==="dblclick"||be(m,N.value)&&m.type==="wheel"||be(m,M.value)&&(m.type!=="wheel"||J.value&&m.type==="wheel"&&!V.value)||!h.value&&m.ctrlKey&&m.type==="wheel"||!B&&!J.value&&!R&&m.type==="wheel")return!1;if(!h&&m.type==="touchstart"&&((I=m.touches)==null?void 0:I.length)>1)return m.preventDefault(),!1;if(!Y.value&&(m.type==="mousedown"||m.type==="touchstart")||r.value===!0&&Array.isArray(d.value)&&d.value.includes(0)&&A===0||Array.isArray(d.value)&&!d.value.includes(A)&&(m.type==="mousedown"||m.type==="touchstart"))return!1;const q=Array.isArray(d.value)&&d.value.includes(A)||r.value===!0&&Array.isArray(d.value)&&!d.value.includes(0)||!A||A<=1;return(!m.ctrlKey||$.value||m.type==="wheel")&&q}),xe([_,Y],()=>{_.value&&!C.value?de.on("zoom",null):_.value||de.on("zoom",m=>{F.value={x:m.transform.x,y:m.transform.y,zoom:m.transform.k};const I=me(m.transform);G=Q(Y.value,k??0),P.viewportChange(I),P.move({event:m,flowTransform:I})})},{immediate:!0}),xe([_,J,u,V,h,E,N],()=>{J.value&&!V.value&&!_.value?w.on("wheel.zoom",m=>{if(be(m,N.value))return!1;const I=V.value||b.value,B=h.value&&m.ctrlKey;if(!(!E.value||J.value||I||B))return!1;m.preventDefault(),m.stopImmediatePropagation();const A=w.property("__zoom").k||1,q=qi();if(!$.value&&m.ctrlKey&&h.value&&q){const Ce=Ot(m),Te=ie(m),qe=A*2**Te;de.scaleTo(w,qe,Ce,m);return}const K=m.deltaMode===1?20:1;let ne=u.value===Vo.Vertical?0:m.deltaX*K,se=u.value===Vo.Horizontal?0:m.deltaY*K;!q&&m.shiftKey&&u.value!==Vo.Vertical&&!ne&&se&&(ne=se,se=0),de.translateBy(w,-(ne/A)*c.value,-(se/A)*c.value);const ge=me(w.property("__zoom"));T&&clearTimeout(T),ee.value?(P.move({event:m,flowTransform:ge}),P.viewportChange(ge),T=setTimeout(()=>{P.moveEnd({event:m,flowTransform:ge}),P.viewportChangeEnd(ge),ee.value=!1},150)):(ee.value=!0,P.moveStart({event:m,flowTransform:ge}),P.viewportChangeStart(ge))},{passive:!1}):typeof S<"u"&&w.on("wheel.zoom",function(m,I){const B=!E.value&&m.type==="wheel"&&!m.ctrlKey,R=V.value||b.value,A=h.value&&m.ctrlKey;if(!R&&!a.value&&!A&&m.type==="wheel"||B||be(m,N.value))return null;m.preventDefault(),S.call(this,m,I)},{passive:!1})},{immediate:!0})});function Q(fe,we){return we===2&&Array.isArray(fe)&&fe.includes(2)}function ie(fe){const we=fe.ctrlKey&&qi()?10:1;return-fe.deltaY*(fe.deltaMode===1?.05:fe.deltaMode?1:.002)*we}function le(fe,we){return fe.x!==we.x&&!Number.isNaN(we.x)||fe.y!==we.y&&!Number.isNaN(we.y)||fe.zoom!==we.k&&!Number.isNaN(we.k)}function me(fe){return{x:fe.x,y:fe.y,zoom:fe.k}}function be(fe,we){return fe.target.closest(`.${we}`)}return(fe,we)=>(z(),W("div",{ref_key:"viewportRef",ref:Z,class:"vue-flow__viewport vue-flow__container"},[Me(z_,{"is-selecting":ue.value,"selection-key-pressed":oe(D),class:ze({connecting:!!oe(g),dragging:oe(O),draggable:oe(d)===!0||Array.isArray(oe(d))&&oe(d).includes(0)})},{default:Ut(()=>[Me(U_,null,{default:Ut(()=>[Ct(fe.$slots,"default")]),_:3})]),_:3},8,["is-selecting","selection-key-pressed","class"])],512))}}),Y_=["id"],K_=["id"],X_=["id"],W_={name:"A11yDescriptions",compatConfig:{MODE:3}},Z_=he({...W_,setup(e){const{id:t,disableKeyboardA11y:n,ariaLiveMessage:o}=Fe();return(i,s)=>(z(),W(_e,null,[x("div",{id:`${oe(md)}-${oe(t)}`,style:{display:"none"}}," Press enter or space to select a node. "+Ae(oe(n)?"":"You can then use the arrow keys to move the node around.")+" You can then use the arrow keys to move the node around, press delete to remove it and press escape to cancel. ",9,Y_),x("div",{id:`${oe(yd)}-${oe(t)}`,style:{display:"none"}}," Press enter or space to select an edge. You can then press delete to remove it or press escape to cancel. ",8,K_),oe(n)?Ne("",!0):(z(),W("div",{key:0,id:`${oe(g2)}-${oe(t)}`,"aria-live":"assertive","aria-atomic":"true",style:{position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)","clip-path":"inset(100%)"}},Ae(oe(o)),9,X_))],64))}});function q_(){const e=Fe();xe(()=>e.viewportHelper.value.viewportInitialized,t=>{t&&setTimeout(()=>{e.emits.init(e),e.emits.paneReady(e)},1)})}function J_(e,t,n){return n===ae.Left?e-t:n===ae.Right?e+t:e}function Q_(e,t,n){return n===ae.Top?e-t:n===ae.Bottom?e+t:e}const al=function({radius:e=10,centerX:t=0,centerY:n=0,position:o=ae.Top,type:i}){return Ie("circle",{class:`vue-flow__edgeupdater vue-flow__edgeupdater-${i}`,cx:J_(t,e,o),cy:Q_(n,e,o),r:e,stroke:"transparent",fill:"transparent"})};al.props=["radius","centerX","centerY","position","type"];al.compatConfig={MODE:3};const Wa=al,e4=he({name:"Edge",compatConfig:{MODE:3},props:["id"],setup(e){const{id:t,addSelectedEdges:n,connectionMode:o,edgeUpdaterRadius:i,emits:s,nodesSelectionActive:r,noPanClassName:l,getEdgeTypes:a,removeSelectedEdges:u,findEdge:c,findNode:d,isValidConnection:p,multiSelectionActive:h,disableKeyboardA11y:b,elementsSelectable:E,edgesUpdatable:N,edgesFocusable:M,hooks:P}=Fe(),g=pe(()=>c(e.id)),{emit:_,on:O}=j2(g.value,s),U=mt(Cs),X=Xt(),H=te(!1),F=te(!1),Z=te(""),j=te(null),C=te("source"),ee=te(null),T=Ve(()=>typeof g.value.selectable>"u"?E.value:g.value.selectable),G=Ve(()=>typeof g.value.updatable>"u"?N.value:g.value.updatable),k=Ve(()=>typeof g.value.focusable>"u"?M.value:g.value.focusable);Hn(H2,e.id),Hn(U2,ee);const L=pe(()=>g.value.class instanceof Function?g.value.class(g.value):g.value.class),$=pe(()=>g.value.style instanceof Function?g.value.style(g.value):g.value.style),D=pe(()=>{const v=g.value.type||"default",y=U?.[`edge-${v}`];if(y)return y;let m=g.value.template??a.value[v];if(typeof m=="string"&&X){const I=Object.keys(X.appContext.components);I&&I.includes(v)&&(m=Bn(v,!1))}return m&&typeof m!="string"?m:(s.error(new Ge(Ue.EDGE_TYPE_MISSING,m)),!1)}),{handlePointerDown:V}=Rd({nodeId:Z,handleId:j,type:C,isValidConnection:p,edgeUpdaterType:C,onEdgeUpdate:ue,onEdgeUpdateEnd:Q});return()=>{const v=d(g.value.source),y=d(g.value.target),m="pathOptions"in g.value?g.value.pathOptions:{};if(!v&&!y)return s.error(new Ge(Ue.EDGE_SOURCE_TARGET_MISSING,g.value.id,g.value.source,g.value.target)),null;if(!v)return s.error(new Ge(Ue.EDGE_SOURCE_MISSING,g.value.id,g.value.source)),null;if(!y)return s.error(new Ge(Ue.EDGE_TARGET_MISSING,g.value.id,g.value.target)),null;if(!g.value||g.value.hidden||v.hidden||y.hidden)return null;let I;o.value===Cn.Strict?I=v.handleBounds.source:I=[...v.handleBounds.source||[],...v.handleBounds.target||[]];const B=Va(I,g.value.sourceHandle);let R;o.value===Cn.Strict?R=y.handleBounds.target:R=[...y.handleBounds.target||[],...y.handleBounds.source||[]];const A=Va(R,g.value.targetHandle),q=B?.position||ae.Bottom,K=A?.position||ae.Top,{x:ne,y:se}=ho(v,B,q),{x:ge,y:Ce}=ho(y,A,K);return g.value.sourceX=ne,g.value.sourceY=se,g.value.targetX=ge,g.value.targetY=Ce,Ie("g",{ref:ee,key:e.id,"data-id":e.id,class:["vue-flow__edge",`vue-flow__edge-${D.value===!1?"default":g.value.type||"default"}`,l.value,L.value,{updating:H.value,selected:g.value.selected,animated:g.value.animated,inactive:!T.value&&!P.value.edgeClick.hasListeners()}],tabIndex:k.value?0:void 0,"aria-label":g.value.ariaLabel===null?void 0:g.value.ariaLabel??`Edge from ${g.value.source} to ${g.value.target}`,"aria-describedby":k.value?`${yd}-${t}`:void 0,"aria-roledescription":"edge",role:k.value?"group":"img",...g.value.domAttributes,onClick:le,onContextmenu:me,onDblclick:be,onMouseenter:fe,onMousemove:we,onMouseleave:de,onKeyDown:k.value?f:void 0},[F.value?null:Ie(D.value===!1?a.value.default:D.value,{id:e.id,sourceNode:v,targetNode:y,source:g.value.source,target:g.value.target,type:g.value.type,updatable:G.value,selected:g.value.selected,animated:g.value.animated,label:g.value.label,labelStyle:g.value.labelStyle,labelShowBg:g.value.labelShowBg,labelBgStyle:g.value.labelBgStyle,labelBgPadding:g.value.labelBgPadding,labelBgBorderRadius:g.value.labelBgBorderRadius,data:g.value.data,events:{...g.value.events,...O},style:$.value,markerStart:`url('#${ei(g.value.markerStart,t)}')`,markerEnd:`url('#${ei(g.value.markerEnd,t)}')`,sourcePosition:q,targetPosition:K,sourceX:ne,sourceY:se,targetX:ge,targetY:Ce,sourceHandleId:g.value.sourceHandle,targetHandleId:g.value.targetHandle,interactionWidth:g.value.interactionWidth,...m}),[G.value==="source"||G.value===!0?[Ie("g",{onMousedown:w,onMouseenter:Y,onMouseout:J},Ie(Wa,{position:q,centerX:ne,centerY:se,radius:i.value,type:"source","data-type":"source"}))]:null,G.value==="target"||G.value===!0?[Ie("g",{onMousedown:S,onMouseenter:Y,onMouseout:J},Ie(Wa,{position:K,centerX:ge,centerY:Ce,radius:i.value,type:"target","data-type":"target"}))]:null]])};function Y(){H.value=!0}function J(){H.value=!1}function ue(v,y){_.update({event:v,edge:g.value,connection:y})}function Q(v){_.updateEnd({event:v,edge:g.value}),F.value=!1}function ie(v,y){v.button===0&&(F.value=!0,Z.value=y?g.value.target:g.value.source,j.value=(y?g.value.targetHandle:g.value.sourceHandle)??null,C.value=y?"target":"source",_.updateStart({event:v,edge:g.value}),V(v))}function le(v){var y;const m={event:v,edge:g.value};T.value&&(r.value=!1,g.value.selected&&h.value?(u([g.value]),(y=ee.value)==null||y.blur()):n([g.value])),_.click(m)}function me(v){_.contextMenu({event:v,edge:g.value})}function be(v){_.doubleClick({event:v,edge:g.value})}function fe(v){_.mouseEnter({event:v,edge:g.value})}function we(v){_.mouseMove({event:v,edge:g.value})}function de(v){_.mouseLeave({event:v,edge:g.value})}function w(v){ie(v,!0)}function S(v){ie(v,!1)}function f(v){var y;!b.value&&_d.includes(v.key)&&T.value&&(v.key==="Escape"?((y=ee.value)==null||y.blur(),u([c(e.id)])):n([c(e.id)]))}}}),t4=e4,n4=he({name:"ConnectionLine",compatConfig:{MODE:3},setup(){var e;const{id:t,connectionMode:n,connectionStartHandle:o,connectionEndHandle:i,connectionPosition:s,connectionLineType:r,connectionLineStyle:l,connectionLineOptions:a,connectionStatus:u,viewport:c,findNode:d}=Fe(),p=(e=mt(Cs))==null?void 0:e["connection-line"],h=pe(()=>{var P;return d((P=o.value)==null?void 0:P.nodeId)}),b=pe(()=>{var P;return d((P=i.value)==null?void 0:P.nodeId)??null}),E=pe(()=>({x:(s.value.x-c.value.x)/c.value.zoom,y:(s.value.y-c.value.y)/c.value.zoom})),N=pe(()=>a.value.markerStart?`url(#${ei(a.value.markerStart,t)})`:""),M=pe(()=>a.value.markerEnd?`url(#${ei(a.value.markerEnd,t)})`:"");return()=>{var P,g,_;if(!h.value||!o.value)return null;const O=o.value.id,U=o.value.type,X=h.value.handleBounds;let H=X?.[U]??[];if(n.value===Cn.Loose){const $=X?.[U==="source"?"target":"source"]??[];H=[...H,...$]}if(!H)return null;const F=(O?H.find($=>$.id===O):H[0])??null,Z=F?.position??ae.Top,{x:j,y:C}=ho(h.value,F,Z);let ee=null;b.value&&(n.value===Cn.Strict?ee=((P=b.value.handleBounds[U==="source"?"target":"source"])==null?void 0:P.find($=>{var D;return $.id===((D=i.value)==null?void 0:D.id)}))||null:ee=((g=[...b.value.handleBounds.source??[],...b.value.handleBounds.target??[]])==null?void 0:g.find($=>{var D;return $.id===((D=i.value)==null?void 0:D.id)}))||null);const T=((_=i.value)==null?void 0:_.position)??(Z?$r[Z]:null);if(!Z||!T)return null;const G=r.value??a.value.type??An.Bezier;let k="";const L={sourceX:j,sourceY:C,sourcePosition:Z,targetX:E.value.x,targetY:E.value.y,targetPosition:T};return G===An.Bezier?[k]=Hd(L):G===An.Step?[k]=kr({...L,borderRadius:0}):G===An.SmoothStep?[k]=kr(L):G===An.SimpleBezier?[k]=Ud(L):k=`M${j},${C} ${E.value.x},${E.value.y}`,Ie("svg",{class:"vue-flow__edges vue-flow__connectionline vue-flow__container"},Ie("g",{class:"vue-flow__connection"},p?Ie(p,{sourceX:j,sourceY:C,sourcePosition:Z,targetX:E.value.x,targetY:E.value.y,targetPosition:T,sourceNode:h.value,sourceHandle:F,targetNode:b.value,targetHandle:ee,markerEnd:M.value,markerStart:N.value,connectionStatus:u.value}):Ie("path",{d:k,class:[a.value.class,u,"vue-flow__connection-path"],style:{...l.value,...a.value.style},"marker-end":M.value,"marker-start":N.value})))}}}),o4=n4,i4=["id","markerWidth","markerHeight","markerUnits","orient"],s4={name:"MarkerType",compatConfig:{MODE:3}},r4=he({...s4,props:{id:{},type:{},color:{default:"none"},width:{default:12.5},height:{default:12.5},markerUnits:{default:"strokeWidth"},orient:{default:"auto-start-reverse"},strokeWidth:{default:1}},setup(e){return(t,n)=>(z(),W("marker",{id:t.id,class:"vue-flow__arrowhead",viewBox:"-10 -10 20 20",refX:"0",refY:"0",markerWidth:`${t.width}`,markerHeight:`${t.height}`,markerUnits:t.markerUnits,orient:t.orient},[t.type===oe(Nr).ArrowClosed?(z(),W("polyline",{key:0,style:at({stroke:t.color,fill:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",points:"-5,-4 0,0 -5,4 -5,-4"},null,4)):Ne("",!0),t.type===oe(Nr).Arrow?(z(),W("polyline",{key:1,style:at({stroke:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",fill:"none",points:"-5,-4 0,0 -5,4"},null,4)):Ne("",!0)],8,i4))}}),l4={class:"vue-flow__marker vue-flow__container","aria-hidden":"true"},a4={name:"MarkerDefinitions",compatConfig:{MODE:3}},u4=he({...a4,setup(e){const{id:t,edges:n,connectionLineOptions:o,defaultMarkerColor:i}=Fe(),s=pe(()=>{const r=new Set,l=[],a=u=>{if(u){const c=ei(u,t);r.has(c)||(typeof u=="object"?l.push({...u,id:c,color:u.color||i.value}):l.push({id:c,color:i.value,type:u}),r.add(c))}};for(const u of[o.value.markerEnd,o.value.markerStart])a(u);for(const u of n.value)for(const c of[u.markerStart,u.markerEnd])a(c);return l.sort((u,c)=>u.id.localeCompare(c.id))});return(r,l)=>(z(),W("svg",l4,[x("defs",null,[(z(!0),W(_e,null,Ye(s.value,a=>(z(),Re(r4,{id:a.id,key:a.id,type:a.type,color:a.color,width:a.width,height:a.height,markerUnits:a.markerUnits,"stroke-width":a.strokeWidth,orient:a.orient},null,8,["id","type","color","width","height","markerUnits","stroke-width","orient"]))),128))])]))}}),c4={name:"Edges",compatConfig:{MODE:3}},d4=he({...c4,setup(e){const{findNode:t,getEdges:n,elevateEdgesOnSelect:o}=Fe();return(i,s)=>(z(),W(_e,null,[Me(u4),(z(!0),W(_e,null,Ye(oe(n),r=>(z(),W("svg",{key:r.id,class:"vue-flow__edges vue-flow__container",style:at({zIndex:oe($2)(r,oe(t),oe(o))})},[Me(oe(t4),{id:r.id},null,8,["id"])],4))),128)),Me(oe(o4))],64))}}),f4=he({name:"Node",compatConfig:{MODE:3},props:["id","resizeObserver"],setup(e){const{id:t,noPanClassName:n,selectNodesOnDrag:o,nodesSelectionActive:i,multiSelectionActive:s,emits:r,removeSelectedNodes:l,addSelectedNodes:a,updateNodeDimensions:u,onUpdateNodeInternals:c,getNodeTypes:d,nodeExtent:p,elevateNodesOnSelect:h,disableKeyboardA11y:b,ariaLiveMessage:E,snapToGrid:N,snapGrid:M,nodeDragThreshold:P,nodesDraggable:g,elementsSelectable:_,nodesConnectable:O,nodesFocusable:U,hooks:X}=Fe(),H=te(null);Hn(Dd,H),Hn(Ad,e.id);const F=mt(Cs),Z=Xt(),j=Bd(),{node:C,parentNode:ee}=Vd(e.id),{emit:T,on:G}=W2(C,r),k=Ve(()=>typeof C.draggable>"u"?g.value:C.draggable),L=Ve(()=>typeof C.selectable>"u"?_.value:C.selectable),$=Ve(()=>typeof C.connectable>"u"?O.value:C.connectable),D=Ve(()=>typeof C.focusable>"u"?U.value:C.focusable),V=pe(()=>L.value||k.value||X.value.nodeClick.hasListeners()||X.value.nodeDoubleClick.hasListeners()||X.value.nodeMouseEnter.hasListeners()||X.value.nodeMouseMove.hasListeners()||X.value.nodeMouseLeave.hasListeners()),Y=Ve(()=>!!C.dimensions.width&&!!C.dimensions.height),J=pe(()=>{const y=C.type||"default",m=F?.[`node-${y}`];if(m)return m;let I=C.template||d.value[y];if(typeof I=="string"&&Z){const B=Object.keys(Z.appContext.components);B&&B.includes(y)&&(I=Bn(y,!1))}return I&&typeof I!="string"?I:(r.error(new Ge(Ue.NODE_TYPE_MISSING,I)),!1)}),ue=Od({id:e.id,el:H,disabled:()=>!k.value,selectable:L,dragHandle:()=>C.dragHandle,onStart(y){T.dragStart(y)},onDrag(y){T.drag(y)},onStop(y){T.dragStop(y)},onClick(y){f(y)}}),Q=pe(()=>C.class instanceof Function?C.class(C):C.class),ie=pe(()=>{const y=(C.style instanceof Function?C.style(C):C.style)||{},m=C.width instanceof Function?C.width(C):C.width,I=C.height instanceof Function?C.height(C):C.height;return!y.width&&m&&(y.width=typeof m=="string"?m:`${m}px`),!y.height&&I&&(y.height=typeof I=="string"?I:`${I}px`),y}),le=Ve(()=>Number(C.zIndex??ie.value.zIndex??0));return c(y=>{(y.includes(e.id)||!y.length)&&be()}),ut(()=>{xe(()=>C.hidden,(y=!1,m,I)=>{!y&&H.value&&(e.resizeObserver.observe(H.value),I(()=>{H.value&&e.resizeObserver.unobserve(H.value)}))},{immediate:!0,flush:"post"})}),xe([()=>C.type,()=>C.sourcePosition,()=>C.targetPosition],()=>{ht(()=>{u([{id:e.id,nodeElement:H.value,forceUpdate:!0}])})}),xe([()=>C.position.x,()=>C.position.y,()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.x},()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.y},()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.z},le,()=>C.selected,()=>C.dimensions.height,()=>C.dimensions.width,()=>{var y;return(y=ee.value)==null?void 0:y.dimensions.height},()=>{var y;return(y=ee.value)==null?void 0:y.dimensions.width}],([y,m,I,B,R,A])=>{const q={x:y,y:m,z:A+(h.value&&C.selected?1e3:0)};typeof I<"u"&&typeof B<"u"?C.computedPosition=E2({x:I,y:B,z:R},q):C.computedPosition=q},{flush:"post",immediate:!0}),xe([()=>C.extent,p],([y,m],[I,B])=>{(y!==I||m!==B)&&me()}),C.extent==="parent"||typeof C.extent=="object"&&"range"in C.extent&&C.extent.range==="parent"?mr(()=>Y).toBe(!0).then(me):me(),()=>C.hidden?null:Ie("div",{ref:H,"data-id":C.id,class:["vue-flow__node",`vue-flow__node-${J.value===!1?"default":C.type||"default"}`,{[n.value]:k.value,dragging:ue?.value,draggable:k.value,selected:C.selected,selectable:L.value,parent:C.isParent},Q.value],style:{visibility:Y.value?"visible":"hidden",zIndex:C.computedPosition.z??le.value,transform:`translate(${C.computedPosition.x}px,${C.computedPosition.y}px)`,pointerEvents:V.value?"all":"none",...ie.value},tabIndex:D.value?0:void 0,role:D.value?"group":void 0,"aria-describedby":b.value?void 0:`${md}-${t}`,"aria-label":C.ariaLabel,"aria-roledescription":"node",...C.domAttributes,onMouseenter:fe,onMousemove:we,onMouseleave:de,onContextmenu:w,onClick:f,onDblclick:S,onKeydown:v},[Ie(J.value===!1?d.value.default:J.value,{id:C.id,type:C.type,data:C.data,events:{...C.events,...G},selected:C.selected,resizing:C.resizing,dragging:ue.value,connectable:$.value,position:C.computedPosition,dimensions:C.dimensions,isValidTargetPos:C.isValidTargetPos,isValidSourcePos:C.isValidSourcePos,parent:C.parentNode,parentNodeId:C.parentNode,zIndex:C.computedPosition.z??le.value,targetPosition:C.targetPosition,sourcePosition:C.sourcePosition,label:C.label,dragHandle:C.dragHandle,onUpdateNodeInternals:be})]);function me(){const y=C.computedPosition,{computedPosition:m,position:I}=rl(C,N.value?Es(y,M.value):y,r.error,p.value,ee.value);(C.computedPosition.x!==m.x||C.computedPosition.y!==m.y)&&(C.computedPosition={...C.computedPosition,...m}),(C.position.x!==I.x||C.position.y!==I.y)&&(C.position=I)}function be(){H.value&&u([{id:e.id,nodeElement:H.value,forceUpdate:!0}])}function fe(y){ue?.value||T.mouseEnter({event:y,node:C})}function we(y){ue?.value||T.mouseMove({event:y,node:C})}function de(y){ue?.value||T.mouseLeave({event:y,node:C})}function w(y){return T.contextMenu({event:y,node:C})}function S(y){return T.doubleClick({event:y,node:C})}function f(y){L.value&&(!o.value||!k.value||P.value>0)&&Ir(C,s.value,a,l,i,!1,H.value),T.click({event:y,node:C})}function v(y){if(!(Tr(y)||b.value))if(_d.includes(y.key)&&L.value){const m=y.key==="Escape";Ir(C,s.value,a,l,i,m,H.value)}else k.value&&C.selected&&so[y.key]&&(y.preventDefault(),E.value=`Moved selected node ${y.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~C.position.x}, y: ${~~C.position.y}`,j({x:so[y.key].x,y:so[y.key].y},y.shiftKey))}}}),h4=f4;function p4(e={includeHiddenNodes:!1}){const{nodes:t}=Fe();return pe(()=>{if(t.value.length===0)return!1;for(const n of t.value)if((e.includeHiddenNodes||!n.hidden)&&(n?.handleBounds===void 0||n.dimensions.width===0||n.dimensions.height===0))return!1;return!0})}const g4={class:"vue-flow__nodes vue-flow__container"},v4={name:"Nodes",compatConfig:{MODE:3}},m4=he({...v4,setup(e){const{getNodes:t,updateNodeDimensions:n,emits:o}=Fe(),i=p4(),s=te();return xe(i,r=>{r&&ht(()=>{o.nodesInitialized(t.value)})},{immediate:!0}),ut(()=>{s.value=new ResizeObserver(r=>{const l=r.map(a=>({id:a.target.getAttribute("data-id"),nodeElement:a.target,forceUpdate:!0}));ht(()=>n(l))})}),us(()=>{var r;return(r=s.value)==null?void 0:r.disconnect()}),(r,l)=>(z(),W("div",g4,[s.value?(z(!0),W(_e,{key:0},Ye(oe(t),(a,u,c,d)=>{const p=[a.id];if(d&&d.key===a.id&&Gh(d,p))return d;const h=(z(),Re(oe(h4),{id:a.id,key:a.id,"resize-observer":s.value},null,8,["id","resize-observer"]));return h.memo=p,h},l,0),128)):Ne("",!0)]))}});function y4(){const{emits:e}=Fe();ut(()=>{if(Pd()){const t=document.querySelector(".vue-flow__pane");t&&window.getComputedStyle(t).zIndex!=="1"&&e.error(new Ge(Ue.MISSING_STYLES))}})}const _4=x("div",{class:"vue-flow__edge-labels"},null,-1),b4={name:"VueFlow",compatConfig:{MODE:3}},w4=he({...b4,props:{id:{},modelValue:{},nodes:{},edges:{},edgeTypes:{},nodeTypes:{},connectionMode:{},connectionLineType:{},connectionLineStyle:{default:void 0},connectionLineOptions:{default:void 0},connectionRadius:{},isValidConnection:{type:[Function,null],default:void 0},deleteKeyCode:{default:void 0},selectionKeyCode:{type:[Boolean,null],default:void 0},multiSelectionKeyCode:{default:void 0},zoomActivationKeyCode:{default:void 0},panActivationKeyCode:{default:void 0},snapToGrid:{type:Boolean,default:void 0},snapGrid:{},onlyRenderVisibleElements:{type:Boolean,default:void 0},edgesUpdatable:{type:[Boolean,String],default:void 0},nodesDraggable:{type:Boolean,default:void 0},nodesConnectable:{type:Boolean,default:void 0},nodeDragThreshold:{},elementsSelectable:{type:Boolean,default:void 0},selectNodesOnDrag:{type:Boolean,default:void 0},panOnDrag:{type:[Boolean,Array],default:void 0},minZoom:{},maxZoom:{},defaultViewport:{},translateExtent:{},nodeExtent:{},defaultMarkerColor:{},zoomOnScroll:{type:Boolean,default:void 0},zoomOnPinch:{type:Boolean,default:void 0},panOnScroll:{type:Boolean,default:void 0},panOnScrollSpeed:{},panOnScrollMode:{},paneClickDistance:{},zoomOnDoubleClick:{type:Boolean,default:void 0},preventScrolling:{type:Boolean,default:void 0},selectionMode:{},edgeUpdaterRadius:{},fitViewOnInit:{type:Boolean,default:void 0},connectOnClick:{type:Boolean,default:void 0},applyDefault:{type:Boolean,default:void 0},autoConnect:{type:[Boolean,Function],default:void 0},noDragClassName:{},noWheelClassName:{},noPanClassName:{},defaultEdgeOptions:{},elevateEdgesOnSelect:{type:Boolean,default:void 0},elevateNodesOnSelect:{type:Boolean,default:void 0},disableKeyboardA11y:{type:Boolean,default:void 0},edgesFocusable:{type:Boolean,default:void 0},nodesFocusable:{type:Boolean,default:void 0},autoPanOnConnect:{type:Boolean,default:void 0},autoPanOnNodeDrag:{type:Boolean,default:void 0},autoPanSpeed:{}},emits:["nodesChange","edgesChange","nodesInitialized","paneReady","init","updateNodeInternals","error","connect","connectStart","connectEnd","clickConnectStart","clickConnectEnd","moveStart","move","moveEnd","selectionDragStart","selectionDrag","selectionDragStop","selectionContextMenu","selectionStart","selectionEnd","viewportChangeStart","viewportChange","viewportChangeEnd","paneScroll","paneClick","paneContextMenu","paneMouseEnter","paneMouseMove","paneMouseLeave","edgeUpdate","edgeContextMenu","edgeMouseEnter","edgeMouseMove","edgeMouseLeave","edgeDoubleClick","edgeClick","edgeUpdateStart","edgeUpdateEnd","nodeContextMenu","nodeMouseEnter","nodeMouseMove","nodeMouseLeave","nodeDoubleClick","nodeClick","nodeDragStart","nodeDrag","nodeDragStop","miniMapNodeClick","miniMapNodeDoubleClick","miniMapNodeMouseEnter","miniMapNodeMouseMove","miniMapNodeMouseLeave","update:modelValue","update:nodes","update:edges"],setup(e,{expose:t,emit:n}){const o=e,i=nh(),s=zs(o,"modelValue",n),r=zs(o,"nodes",n),l=zs(o,"edges",n),a=Fe(o),u=Q2({modelValue:s,nodes:r,edges:l},o,a);return t_(n,a.hooks),q_(),y4(),Hn(Cs,i),jr(()=>{u()}),t(a),(c,d)=>(z(),W("div",{ref:oe(a).vueFlowRef,class:"vue-flow"},[Me(j_,null,{default:Ut(()=>[Me(d4),_4,Me(m4),Ct(c.$slots,"zoom-pane")]),_:3}),Ct(c.$slots,"default"),Me(Z_)],512))}});var sn=(e=>(e.Lines="lines",e.Dots="dots",e))(sn||{});const jd=function({dimensions:e,size:t,color:n}){return Ie("path",{stroke:n,"stroke-width":t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`})},Yd=function({radius:e,color:t}){return Ie("circle",{cx:e,cy:e,r:e,fill:t})};sn.Lines+"",sn.Dots+"";const x4={[sn.Dots]:"#81818a",[sn.Lines]:"#eee"},E4=["id","x","y","width","height","patternTransform"],S4={key:2,height:"100",width:"100"},C4=["fill"],N4=["x","y","fill"],T4={name:"Background",compatConfig:{MODE:3}},M4=he({...T4,props:{id:{},variant:{default:()=>sn.Dots},gap:{default:20},size:{default:1},lineWidth:{default:1},patternColor:{},color:{},bgColor:{},height:{default:100},width:{default:100},x:{default:0},y:{default:0},offset:{default:0}},setup(e){const{id:t,viewport:n}=Fe(),o=pe(()=>{const r=n.value.zoom,[l,a]=Array.isArray(e.gap)?e.gap:[e.gap,e.gap],u=[l*r||1,a*r||1],c=e.size*r,[d,p]=Array.isArray(e.offset)?e.offset:[e.offset,e.offset],h=[d*r||1+u[0]/2,p*r||1+u[1]/2];return{scaledGap:u,offset:h,size:c}}),i=Ve(()=>`pattern-${t}${e.id?`-${e.id}`:""}`),s=Ve(()=>e.color||e.patternColor||x4[e.variant||sn.Dots]);return(r,l)=>(z(),W("svg",{class:"vue-flow__background vue-flow__container",style:at({height:`${r.height>100?100:r.height}%`,width:`${r.width>100?100:r.width}%`})},[Ct(r.$slots,"pattern-container",{id:i.value},()=>[x("pattern",{id:i.value,x:oe(n).x%o.value.scaledGap[0],y:oe(n).y%o.value.scaledGap[1],width:o.value.scaledGap[0],height:o.value.scaledGap[1],patternTransform:`translate(-${o.value.offset[0]},-${o.value.offset[1]})`,patternUnits:"userSpaceOnUse"},[Ct(r.$slots,"pattern",{},()=>[r.variant===oe(sn).Lines?(z(),Re(oe(jd),{key:0,size:r.lineWidth,color:s.value,dimensions:o.value.scaledGap},null,8,["size","color","dimensions"])):r.variant===oe(sn).Dots?(z(),Re(oe(Yd),{key:1,color:s.value,radius:o.value.size/2},null,8,["color","radius"])):Ne("",!0),r.bgColor?(z(),W("svg",S4,[x("rect",{width:"100%",height:"100%",fill:r.bgColor},null,8,C4)])):Ne("",!0)])],8,E4)]),x("rect",{x:r.x,y:r.y,width:"100%",height:"100%",fill:`url(#${i.value})`},null,8,N4),Ct(r.$slots,"default",{id:i.value})],4))}}),$4={class:"vue-flow-container"},I4={class:"vue-flow-viewport"},k4={class:"viewport-wrapper"},P4={class:"create-wrapper"},A4={key:0,class:"floating-create-expanded"},D4={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-check",style:{height:"100%"}},O4=he({__name:"SchemaEditor",setup(e){const t=_t(),n=Wt(),o=te(""),i=te(!1),s=te(!0),r=()=>{const h=o.value.trim();if(h!==""){if(!Lc(h)){Kt(Yt.modelName);return}t.createNode(h),o.value="",i.value=!1}},l=h=>{t.deleteNode(h)},a=h=>{n.open(h,vm,{id:h})},u=h=>{n.open(h,Iv,{id:h})},c=(h,b)=>{n.open("Edit field",jv,{id:h,field:b})},d=h=>{n.open(h,dm,{id:h})},p=(h,b)=>{n.open(b.fieldName,tm,{id:h,relation:b})};return(h,b)=>(z(),W("div",$4,[x("div",I4,[x("div",k4,[x("div",{class:"toggle-grid-button",onClick:b[0]||(b[0]=E=>s.value=!s.value)},"#"),Me(oe(w4),{nodes:oe(t).nodes,"onUpdate:nodes":b[4]||(b[4]=E=>oe(t).nodes=E),edges:oe(t).edges,"onUpdate:edges":b[5]||(b[5]=E=>oe(t).edges=E),"default-viewport":{zoom:2},"max-zoom":2,"min-zoom":.1,"fit-view-on-init":!0},{"node-custom":Ut(E=>[Me(pv,Mn(E,{onDeleteNode:l,onRenameNode:a,onAddField:u,onAddRelation:d,onOpenEditFieldModal:c,onOpenEditRelationModal:p}),null,16)]),default:Ut(()=>[s.value?(z(),Re(oe(M4),{key:0,variant:"lines",size:51,gap:51})):Ne("",!0),x("div",P4,[i.value?(z(),W("div",A4,[x("button",{class:"collapse-btn",onClick:b[1]||(b[1]=E=>i.value=!1)},b[6]||(b[6]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-left size-4 rdp-nav_icon"},[x("path",{d:"m15 18-6-6 6-6"})],-1)])),ye(x("input",{class:"create-model-input",type:"text",placeholder:"Enter Model Name","onUpdate:modelValue":b[2]||(b[2]=E=>o.value=E),onKeyup:fr(r,["enter"]),maxlength:"100"},null,544),[[tt,o.value]]),x("button",{class:"create-model-btn",onClick:r},[(z(),W("svg",D4,b[7]||(b[7]=[x("path",{d:"M20 6 9 17l-5-5"},null,-1)])))])])):Ne("",!0),i.value?Ne("",!0):(z(),W("div",{key:1,class:"create-circle",onClick:b[3]||(b[3]=E=>i.value=!0)},"+"))])]),_:1},8,["nodes","edges"])])])]))}}),R4=Xe(O4,[["__scopeId","data-v-87b25a7b"]]),V4={class:"field-modal-container"},B4={class:"input-container"},L4={class:"input-group"},F4={class:"input-group"},z4=he({__name:"AddEnumValueModal",props:{enumName:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te("auto()"),r=()=>{if(!Fc(i.value)){Kt(Yt.enumValueName);return}n.addEnumValue(t.enumName,{name:i.value,value:s.value}),o.close()};return(l,a)=>(z(),W("main",V4,[x("div",B4,[x("div",L4,[a[2]||(a[2]=x("label",{class:"field-label"},"Name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[0]||(a[0]=u=>i.value=u),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",F4,[a[3]||(a[3]=x("label",{class:"field-label"},"Value",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[1]||(a[1]=u=>s.value=u),type:"text",maxlength:"100"},null,512),[[tt,s.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:r},"Save")])]))}}),H4=Xe(z4,[["__scopeId","data-v-33da89f7"]]),U4={class:"field-modal-container"},G4={class:"input-container"},j4={class:"input-group"},Y4={class:"input-group"},K4=he({__name:"EditEnumValueModal",props:{enumName:{},enumValue:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(t.enumValue.name),s=te(t.enumValue.value),r=()=>{if(!Fc(i.value)){Kt(Yt.enumValueName);return}n.updateEnumValue(t.enumName,t.enumValue.name,{name:i.value,value:s.value}),o.close()};return(l,a)=>(z(),W("main",U4,[x("div",G4,[x("div",j4,[a[2]||(a[2]=x("label",{class:"field-label"},"Name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[0]||(a[0]=u=>i.value=u),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",Y4,[a[3]||(a[3]=x("label",{class:"field-label"},"Value",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[1]||(a[1]=u=>s.value=u),type:"text",maxlength:"100"},null,512),[[tt,s.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:r},"Save")])]))}}),X4=Xe(K4,[["__scopeId","data-v-08474887"]]),W4={class:"layout-container"},Z4={class:"enum-sidebar"},q4={class:"sidebar-header"},J4={class:"input-group"},Q4={class:"input-horizontal"},e3=["disabled"],t3={class:"enum-list"},n3=["onClick"],o3={class:"enum-name-wrapper"},i3={key:0},s3=["onKeyup"],r3={class:"enum-item-actions"},l3=["onClick"],a3={key:0},u3={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-pencil"},c3=["onClick"],d3={key:0,class:"main-content"},f3={class:"main-table"},h3={class:"name-column"},p3={class:"value-column"},g3={class:"action-column"},v3={class:"action-content"},m3=["onMouseover","onMouseleave"],y3={key:0,class:"dropdown-list"},_3=["onClick"],b3=["onClick"],w3=he({__name:"EnumEditor",setup(e){const t=_t(),n=Wt(),o=te(""),i=te(null),s=te(null),r=te(""),l=te(null),a=te(null),u=()=>{const _=i.value;_&&n.open("Add Enum Value",H4,{enumName:_.name})},c=_=>{const O=i.value;O&&n.open("Edit Enum Value",X4,{enumName:O.name,enumValue:_})},d=_=>{console.log("Delete enum value:",_)},p=_=>{i.value=_},h=()=>{const _=o.value.trim();if(_==="")return;if(!aa(_)){Kt(Yt.enumName);return}const O=t.addEnum(_);o.value="",p(O)},b=_=>{t.deleteEnum(_.name),i.value?.name===_.name&&(i.value=null)},E=_=>s.value===_.name,N=_=>{E(_)?M(_):(s.value=_.name,r.value=_.name)},M=_=>{const O=r.value.trim();O&&O!==_.name&&(aa(O)?(t.updateEnumName(_.name,O),i.value?.name===_.name&&(i.value.name=O)):Kt(Yt.enumName)),s.value=null,r.value=""},P=_=>{l.value=_},g=_=>{l.value===_&&(l.value=null)};return(_,O)=>(z(),W("div",W4,[x("div",Z4,[x("div",q4,[x("div",J4,[x("div",Q4,[ye(x("input",{id:"new-enum-name",class:"project-name",type:"text",placeholder:"Enter new enum name","onUpdate:modelValue":O[0]||(O[0]=U=>o.value=U),onKeyup:fr(h,["enter"]),maxlength:"100"},null,544),[[tt,o.value]]),x("button",{class:"confirm-btn",onClick:h,disabled:!o.value},O[3]||(O[3]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-check"},[x("path",{d:"M20 6 9 17l-5-5"})],-1)]),8,e3)])])]),x("div",t3,[(z(!0),W(_e,null,Ye(oe(t).enums,U=>(z(),W("div",{key:U.name,class:ze(["enum-item",{active:i.value?.name===U.name}]),onClick:X=>p(U)},[x("div",o3,[E(U)?ye((z(),W("input",{key:1,type:"text",class:"enum-name-edit-input","onUpdate:modelValue":O[1]||(O[1]=X=>r.value=X),onClick:O[2]||(O[2]=Do(()=>{},["stop"])),onKeyup:fr(X=>N(U),["enter"]),ref_for:!0,ref_key:"enumNameInput",ref:a,maxlength:"100"},null,40,s3)),[[tt,r.value]]):(z(),W("span",i3,Ae(U.name),1))]),x("div",r3,[x("button",{class:"edit-enum-toggle-btn",onClick:Do(X=>N(U),["stop"])},[E(U)?(z(),W("span",a3,O[4]||(O[4]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save"},[x("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),x("path",{d:"M17 21v-8H7v8"}),x("path",{d:"M7 3v4h6"})],-1)]))):(z(),W("svg",u3,O[5]||(O[5]=[x("path",{d:"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"},null,-1),x("path",{d:"m15 5 4 4"},null,-1)])))],8,l3),x("button",{class:"delete-enum-btn",onClick:Do(X=>b(U),["stop"])},"×",8,c3)])],10,n3))),128))])]),i.value?(z(),W("div",d3,[x("table",f3,[O[7]||(O[7]=x("thead",null,[x("tr",null,[x("th",{class:"name-column"},"Name"),x("th",{class:"value-column"},"Value"),x("th",{class:"action-column"},"Action")])],-1)),x("tbody",null,[(z(!0),W(_e,null,Ye(i.value.values,(U,X)=>(z(),W("tr",{key:X},[x("td",h3,Ae(U.name),1),x("td",p3,Ae(U.value),1),x("td",g3,[x("div",v3,[x("div",{class:"enum-actions",onMouseover:H=>P(X),onMouseleave:H=>g(X)},[O[6]||(O[6]=x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-ellipsis"},[x("circle",{cx:"12",cy:"12",r:"1"}),x("circle",{cx:"19",cy:"12",r:"1"}),x("circle",{cx:"5",cy:"12",r:"1"})],-1)),l.value===X?(z(),W("div",y3,[x("div",{class:"dropdown-item",onClick:H=>c(U)},"Edit",8,_3),x("div",{class:"dropdown-item",onClick:H=>d(U)},"Delete",8,b3)])):Ne("",!0)],40,m3)])])]))),128))])]),x("div",{class:"main-footer"},[x("button",{class:"add-btn",onClick:u},"Add Enum Value")])])):Ne("",!0)]))}}),x3=Xe(w3,[["__scopeId","data-v-c7d104ef"]]),E3={class:"container"},S3={class:"editor-container"},C3={class:"editor-header"},N3={class:"editor-content"},T3=he({__name:"Viewport",setup(e){const t=te("models");return(n,o)=>(z(),W("main",E3,[x("div",S3,[x("div",C3,[x("div",{class:ze(["header-section",{active:t.value==="models"}]),onClick:o[0]||(o[0]=i=>t.value="models")}," Models ",2),o[2]||(o[2]=x("div",{class:"header-divider"},null,-1)),x("div",{class:ze(["header-section",{active:t.value==="enums"}]),onClick:o[1]||(o[1]=i=>t.value="enums")}," Enums ",2)]),x("div",N3,[t.value==="models"?(z(),Re(R4,{key:0})):Ne("",!0),t.value==="enums"?(z(),Re(x3,{key:1})):Ne("",!0)])])]))}}),M3=Xe(T3,[["__scopeId","data-v-b0fef25d"]]),$3={class:"container"},I3=he({__name:"SchemaStep",setup(e){return(t,n)=>(z(),W("main",$3,[n[0]||(n[0]=x("h1",null,"Design your Schema",-1)),n[1]||(n[1]=x("br",null,null,-1)),x("div",null,[Me(M3)])]))}}),k3=Xe(I3,[["__scopeId","data-v-33ee6271"]]),P3={class:"container"},A3={class:"feature-grid"},D3=["onClick"],O3=["innerHTML"],R3={class:"feature-label"},V3=he({__name:"FeatureSelectionStep",setup(e){const t={Databases:[{key:"use_postgres",label:"PostgreSQL",icon:''}],Migrations:[{key:"use_alembic",label:"Alembic",icon:` + + `}],Authentication:[{key:"use_builtin_auth",label:"Built-in Auth",icon:` + + `}],Caching:[{key:"use_redis",label:"Redis",icon:''}],"Message Queues":[{key:"use_rabbitmq",label:"RabbitMQ",icon:' '},{key:"use_taskiq",label:"TaskIQ",icon:` + + `}],Monitoring:[{key:"use_prometheus",label:"Prometheus",icon:` + + + `}],Logging:[{key:"use_logfire",label:"Logfire",icon:` + + `}]},n=go({use_postgres:!1,use_alembic:!1,use_builtin_auth:!1,use_redis:!1,use_rabbitmq:!1,use_taskiq:!1,use_prometheus:!1,use_logfire:!1});function o(i){n[i]=!n[i]}return(i,s)=>(z(),W("main",P3,[s[0]||(s[0]=x("h1",null,"Project Features",-1)),(z(),W(_e,null,Ye(t,(r,l)=>x("section",{key:l,class:"category-section"},[x("h2",null,Ae(l),1),x("div",A3,[(z(!0),W(_e,null,Ye(r,a=>(z(),W("div",{class:ze(["feature-item",{selected:n[a.key]}]),key:a.key,onClick:u=>o(a.key)},[x("div",{class:"feature-icon",innerHTML:a.icon},null,8,O3),x("div",R3,Ae(a.label),1)],10,D3))),128))])])),64))]))}}),B3=Xe(V3,[["__scopeId","data-v-432690c7"]]),L3={class:"container"},F3=he({__name:"GenerationStep",setup(e){const t=_t();return(n,o)=>(z(),W("main",L3,[o[1]||(o[1]=x("h1",null,"Generate",-1)),x("button",{onClick:o[0]||(o[0]=(...i)=>oe(t).callGenerateEndpoint&&oe(t).callGenerateEndpoint(...i))},"GENERATE :P")]))}}),z3=Xe(F3,[["__scopeId","data-v-9243bc5e"]]),H3={class:"modal"},U3={class:"modal-header"},G3={class:"modal-title"},j3={name:"title"},Y3={class:"modal-body"},K3=he({__name:"GlobalModal",setup(e){const t=Wt(),{modalTitle:n,isOpen:o,currentComponent:i,props:s}=Op(t);function r(){t.close()}return(l,a)=>(z(),Re(Hf,{to:"body"},[oe(o)?(z(),W("div",{key:0,class:"modal-backdrop",onClick:Do(r,["self"])},[x("div",H3,[x("div",U3,[x("div",G3,[x("div",j3,Ae(oe(n)),1)]),x("div",{class:"modal-actions",onClick:r},a[0]||(a[0]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-x h-4 w-4"},[x("path",{d:"M18 6 6 18"}),x("path",{d:"m6 6 12 12"})],-1)]))]),x("div",Y3,[oe(i)?(z(),Re(vo(oe(i)),Mn({key:0},oe(s),{onClose:r}),null,16)):Ne("",!0)])])])):Ne("",!0)]))}}),X3=Xe(K3,[["__scopeId","data-v-d61e0035"]]),W3={id:"app"},Z3={class:"main"},q3={class:"content"},J3=he({__name:"App",setup(e){const t=[Xg,ev,k3,B3,z3];return(n,o)=>(z(),W(_e,null,[x("div",W3,[o[0]||(o[0]=Wr('FastAPI Forge',1)),x("main",Z3,[x("div",q3,[Me(Lg,{steps:t})])])]),Me(X3,{ref:"modalRef"},null,512)],64))}}),ul=hc(J3);ul.use($p());const Q3={position:Xo.TOP_CENTER,shareAppContext:!0,containerClassName:"container-class"};ul.use(Pg,Q3);ul.mount("#app"); diff --git a/fastapi_forge/static/assets/index-C3-dGTeK.css b/fastapi_forge/static/assets/index-C3-dGTeK.css new file mode 100644 index 0000000..2e3e2b1 --- /dev/null +++ b/fastapi_forge/static/assets/index-C3-dGTeK.css @@ -0,0 +1 @@ +body{font-family:DM Sans,sans-serif;font-optical-sizing:auto}:root{--color-primary: #5294fd;--color-secondary: #dcebfe;--color-success: #7fbc8c;--color-danger: #ff6b6b;--color-warning: #f5c26b;--color-background: #f4f4f0}.Vue-Toastification__toast{border:2px solid black;border-radius:0!important;color:#000!important;box-shadow:2px 2px!important}.Vue-Toastification__toast--success.container-class{background-color:var(--color-success)}.Vue-Toastification__toast--error.container-class{background-color:var(--color-danger)}.Vue-Toastification__toast--warning.container-class{background-color:var(--color-warning)}.Vue-Toastification__container{z-index:9999;position:fixed;padding:4px;width:600px;box-sizing:border-box;display:flex;min-height:100%;color:#fff;flex-direction:column;pointer-events:none}@media only screen and (min-width : 600px){.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:1em}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:1em;flex-direction:column-reverse}.Vue-Toastification__container.top-left,.Vue-Toastification__container.bottom-left{left:1em}.Vue-Toastification__container.top-left .Vue-Toastification__toast,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast{margin-right:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-left .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast--rtl{margin-right:unset;margin-left:auto}}.Vue-Toastification__container.top-right,.Vue-Toastification__container.bottom-right{right:1em}.Vue-Toastification__container.top-right .Vue-Toastification__toast,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast{margin-left:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-right .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast--rtl{margin-left:unset;margin-right:auto}}.Vue-Toastification__container.top-center,.Vue-Toastification__container.bottom-center{left:50%;margin-left:-300px}.Vue-Toastification__container.top-center .Vue-Toastification__toast,.Vue-Toastification__container.bottom-center .Vue-Toastification__toast{margin-left:auto;margin-right:auto}}@media only screen and (max-width : 600px){.Vue-Toastification__container{width:100vw;padding:0;left:0;margin:0}.Vue-Toastification__container .Vue-Toastification__toast{width:100%}.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:0}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:0;flex-direction:column-reverse}}.Vue-Toastification__toast{display:inline-flex;position:relative;max-height:800px;min-height:64px;box-sizing:border-box;margin-bottom:1rem;padding:22px 24px;border-radius:8px;box-shadow:0 1px 10px #0000001a,0 2px 15px #0000000d;justify-content:space-between;font-family:Lato,Helvetica,Roboto,Arial,sans-serif;max-width:600px;min-width:326px;pointer-events:auto;overflow:hidden;transform:translateZ(0);direction:ltr}.Vue-Toastification__toast--rtl{direction:rtl}.Vue-Toastification__toast--default{background-color:#1976d2;color:#fff}.Vue-Toastification__toast--info{background-color:#2196f3;color:#fff}.Vue-Toastification__toast--success{background-color:#4caf50;color:#fff}.Vue-Toastification__toast--error{background-color:#ff5252;color:#fff}.Vue-Toastification__toast--warning{background-color:#ffc107;color:#fff}@media only screen and (max-width : 600px){.Vue-Toastification__toast{border-radius:0;margin-bottom:.5rem}}.Vue-Toastification__toast-body{flex:1;line-height:24px;font-size:16px;word-break:break-word;white-space:pre-wrap}.Vue-Toastification__toast-component-body{flex:1}.Vue-Toastification__toast.disable-transition{animation:none!important}.Vue-Toastification__close-button{font-weight:700;font-size:24px;line-height:24px;background:transparent;outline:none;border:none;padding:0 0 0 10px;cursor:pointer;transition:.3s ease;align-items:center;color:#fff;opacity:.3;transition:visibility 0s,opacity .2s linear}.Vue-Toastification__close-button:hover,.Vue-Toastification__close-button:focus{opacity:1}.Vue-Toastification__toast:not(:hover) .Vue-Toastification__close-button.show-on-hover{opacity:0}.Vue-Toastification__toast--rtl .Vue-Toastification__close-button{padding-left:unset;padding-right:10px}@keyframes scale-x-frames{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Vue-Toastification__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:10000;background-color:#ffffffb3;transform-origin:left;animation:scale-x-frames linear 1 forwards}.Vue-Toastification__toast--rtl .Vue-Toastification__progress-bar{right:0;left:unset;transform-origin:right}.Vue-Toastification__icon{margin:auto 18px auto 0;background:transparent;outline:none;border:none;padding:0;transition:.3s ease;align-items:center;width:20px;height:100%}.Vue-Toastification__toast--rtl .Vue-Toastification__icon{margin:auto 0 auto 18px}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceOutRight{40%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(1000px,0,0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Vue-Toastification__bounce-enter-active.top-left,.Vue-Toastification__bounce-enter-active.bottom-left{animation-name:bounceInLeft}.Vue-Toastification__bounce-enter-active.top-right,.Vue-Toastification__bounce-enter-active.bottom-right{animation-name:bounceInRight}.Vue-Toastification__bounce-enter-active.top-center{animation-name:bounceInDown}.Vue-Toastification__bounce-enter-active.bottom-center{animation-name:bounceInUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-left,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-left{animation-name:bounceOutLeft}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-right,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-right{animation-name:bounceOutRight}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-center{animation-name:bounceOutUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-center{animation-name:bounceOutDown}.Vue-Toastification__bounce-leave-active,.Vue-Toastification__bounce-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__bounce-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes fadeOutTop{0%{transform:translateY(0);opacity:1}to{transform:translateY(-50px);opacity:0}}@keyframes fadeOutLeft{0%{transform:translate(0);opacity:1}to{transform:translate(-50px);opacity:0}}@keyframes fadeOutBottom{0%{transform:translateY(0);opacity:1}to{transform:translateY(50px);opacity:0}}@keyframes fadeOutRight{0%{transform:translate(0);opacity:1}to{transform:translate(50px);opacity:0}}@keyframes fadeInLeft{0%{transform:translate(-50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInRight{0%{transform:translate(50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInTop{0%{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fadeInBottom{0%{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}.Vue-Toastification__fade-enter-active.top-left,.Vue-Toastification__fade-enter-active.bottom-left{animation-name:fadeInLeft}.Vue-Toastification__fade-enter-active.top-right,.Vue-Toastification__fade-enter-active.bottom-right{animation-name:fadeInRight}.Vue-Toastification__fade-enter-active.top-center{animation-name:fadeInTop}.Vue-Toastification__fade-enter-active.bottom-center{animation-name:fadeInBottom}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-left,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-left{animation-name:fadeOutLeft}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-right,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-right{animation-name:fadeOutRight}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-center{animation-name:fadeOutTop}.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-center{animation-name:fadeOutBottom}.Vue-Toastification__fade-leave-active,.Vue-Toastification__fade-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__fade-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes slideInBlurredLeft{0%{transform:translate(-1000px) scaleX(2.5) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredTop{0%{transform:translateY(-1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredRight{0%{transform:translate(1000px) scaleX(2.5) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredBottom{0%{transform:translateY(1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideOutBlurredTop{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 0%;filter:blur(0);opacity:1}to{transform:translateY(-1000px) scaleY(2) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredBottom{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateY(1000px) scaleY(2) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredLeft{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(-1000px) scaleX(2) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}}@keyframes slideOutBlurredRight{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(1000px) scaleX(2) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}}.Vue-Toastification__slideBlurred-enter-active.top-left,.Vue-Toastification__slideBlurred-enter-active.bottom-left{animation-name:slideInBlurredLeft}.Vue-Toastification__slideBlurred-enter-active.top-right,.Vue-Toastification__slideBlurred-enter-active.bottom-right{animation-name:slideInBlurredRight}.Vue-Toastification__slideBlurred-enter-active.top-center{animation-name:slideInBlurredTop}.Vue-Toastification__slideBlurred-enter-active.bottom-center{animation-name:slideInBlurredBottom}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-left,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-left{animation-name:slideOutBlurredLeft}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-right,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-right{animation-name:slideOutBlurredRight}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-center{animation-name:slideOutBlurredTop}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-center{animation-name:slideOutBlurredBottom}.Vue-Toastification__slideBlurred-leave-active,.Vue-Toastification__slideBlurred-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__slideBlurred-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}.StepWizard[data-v-9f8c12c9]{display:flex;flex-direction:column;align-items:center;height:100%}.step-indicators[data-v-9f8c12c9]{display:flex;justify-content:center;margin-bottom:1rem}.step[data-v-9f8c12c9]{caret-color:transparent;width:50px;height:50px;border-radius:50%;background-color:#d3d3d3;display:flex;align-items:center;justify-content:center;margin:0 5px;cursor:pointer;border:2px solid black;box-shadow:2px 2px #000;transition:transform .1s ease-out,box-shadow .1s}.step[data-v-9f8c12c9]:hover{background-color:#a9a9a9;box-shadow:0 0 #000;transform:translate(2px,2px)}.step.active[data-v-9f8c12c9]{background-color:var(--color-primary)}.step.completed[data-v-9f8c12c9]{background-color:var(--color-success)}.step-content[data-v-9f8c12c9]{margin-bottom:3rem}.step-actions[data-v-9f8c12c9]{display:grid;grid-template-rows:1;grid-template-columns:2;justify-content:space-between;width:10%;position:absolute;bottom:8rem}.prev-btn[data-v-9f8c12c9]{grid-column:1}.next-btn[data-v-9f8c12c9]{grid-column:2}.next-btn[data-v-9f8c12c9],.prev-btn[data-v-9f8c12c9],.finish-btn[data-v-9f8c12c9]{caret-color:transparent;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-background);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s;font-weight:700}.next-btn[data-v-9f8c12c9]:hover,.prev-btn[data-v-9f8c12c9]:hover,.finish-btn[data-v-9f8c12c9]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer}.project-name[data-v-cad93208]{width:100%;padding:.5rem;border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.project-name[data-v-cad93208]:focus,.project-name.confirmed[data-v-cad93208]{outline:none;transform:translate(2px,2px);box-shadow:0 0 #000}.project-name.confirmed[data-v-cad93208]{cursor:not-allowed}.input-group[data-v-cad93208]{display:flex;flex-direction:column;gap:.1rem;margin-bottom:1rem;width:100%}.project-name-label[data-v-cad93208]{font-weight:700;margin-bottom:.25rem}.input-horizontal[data-v-cad93208]{display:flex;align-items:center;gap:.5rem}.confirm-btn[data-v-cad93208]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-background);padding:.25rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;height:2.125rem;font-weight:700}.confirm-btn[data-v-cad93208]:hover,.confirm-btn.confirmed[data-v-cad93208]{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s;background-color:var(--color-success)}.confirm-btn.confirmed[data-v-cad93208]{transition:.1s;background-color:var(--color-success)}.confirm-btn.confirmed[data-v-cad93208]:hover{background-color:var(--color-background);transform:translate(0);box-shadow:3px 3px #000}.label-group[data-v-cad93208]{display:flex;justify-content:space-between;align-items:center}.input-error[data-v-cad93208]{border-color:#f44;background-color:#fee}.error-message[data-v-cad93208]{color:#ff4910;font-size:.8rem;margin-top:.25rem}.confirm-btn[data-v-cad93208]:disabled{opacity:.6;cursor:not-allowed;background-color:var(--color-background)}.container[data-v-cad93208],.container[data-v-9256ee53]{display:flex;flex-direction:column;align-items:center;width:100%;max-width:360px;min-width:360px}.db-grid-container[data-v-9256ee53]{width:100%;display:flex;justify-content:center}.db-grid[data-v-9256ee53]{display:grid;grid-template-columns:repeat(3,100px);gap:3rem;justify-items:center}.db-item[data-v-9256ee53]{caret-color:transparent;border:2px solid black;font-weight:700;border-radius:4px;box-shadow:3px 3px #000;padding:1rem;text-align:center;width:100px;height:100px;display:flex;align-items:center;justify-content:center;background-color:var(--color-background);transition:all .1s ease-in-out}.db-item.enabled[data-v-9256ee53]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;background-color:var(--color-success)}.db-item.enabled.confirmed[data-v-9256ee53]{transform:translate(2px,2px);box-shadow:0 0 #000;background-color:var(--color-success)}.db-item.enabled.confirmed[data-v-9256ee53]:hover{background-color:var(--color-background);transform:translate(0);box-shadow:3px 3px #000}.db-item.disabled[data-v-9256ee53]{opacity:.6;background-color:#e0e0e0;cursor:not-allowed;box-shadow:none}.db-item.disabled[data-v-9256ee53]:hover{transform:none;box-shadow:none}.custom-node[data-v-b7467be7]{border:2px solid black;border-radius:6px;width:250px;overflow:hidden;background-color:#fff}.custom-node-header[data-v-b7467be7]{display:flex;justify-content:space-between;align-items:center;border-bottom:2px solid black;width:100%;height:32px}.custom-node-title[data-v-b7467be7]{font-weight:700;background-color:var(--color-primary);width:100%;height:100%;display:flex;align-items:center;padding:0 8px}.custom-node-actions[data-v-b7467be7]{cursor:pointer;width:40px;height:100%;display:flex;align-items:center;justify-content:center;border-left:2px solid black;background-color:var(--color-primary)}.custom-node-body[data-v-b7467be7]{display:flex;flex-direction:column;cursor:pointer}.custom-node-field-row[data-v-b7467be7]{display:flex;justify-content:space-between;align-items:center;height:28px;padding:0 8px;border-bottom:1px solid #e0e0e0}.custom-node-field-row[data-v-b7467be7]:hover{background-color:#f8f8f8}.custom-node-field-row[data-v-b7467be7]:last-child{border-bottom:none}.custom-node-field-name[data-v-b7467be7]{font-weight:600;color:#343a40;white-space:nowrap;overflow:hidden}.custom-node-field-type[data-v-b7467be7]{font-style:italic;color:#6c757d;white-space:nowrap}.dropdown-list[data-v-b7467be7]{margin-left:160px;caret-color:transparent;border:2px solid black;position:absolute;width:100%;min-width:120px;max-width:140px;border-radius:5px;background:#fff;z-index:100;padding:4px;box-sizing:border-box}.dropdown-item[data-v-b7467be7]{height:35px;width:100%;display:flex;align-items:center;padding:0 5px;box-sizing:border-box;border:2px solid transparent;border-radius:5px}.dropdown-item[data-v-b7467be7]:hover{border:2px solid black;cursor:pointer}.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-textbg{fill:#fff}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{border-width:1px;border-style:solid;border-color:#bbb}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}.field-modal-container[data-v-957caa91]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-957caa91]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-957caa91]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-957caa91]{font-weight:700;margin-bottom:5px}.field-input[data-v-957caa91],.field-select[data-v-957caa91]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-957caa91]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-957caa91]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-957caa91]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-957caa91]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.field-modal-container[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-d1c2c65c]{font-weight:700;margin-bottom:5px}.field-input[data-v-d1c2c65c],.field-select[data-v-d1c2c65c]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-d1c2c65c]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.delete-field-btn[data-v-d1c2c65c]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-danger);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.delete-field-btn[data-v-d1c2c65c]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.save-field-btn[data-v-d1c2c65c]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-d1c2c65c]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.relation-container[data-v-de485ddf]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-de485ddf]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-de485ddf]{display:flex;flex-direction:column;gap:.15rem}.relation-label[data-v-de485ddf]{font-weight:700;margin-bottom:5px}.relation-input[data-v-de485ddf],.relation-select[data-v-de485ddf]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-de485ddf]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-de485ddf]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-relation-btn[data-v-de485ddf]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-relation-btn[data-v-de485ddf]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.delete-relation-btn[data-v-de485ddf]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-danger);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.delete-relation-btn[data-v-de485ddf]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.relation-container[data-v-074cc5ca]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-074cc5ca]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-074cc5ca]{display:flex;flex-direction:column;gap:.15rem}.relation-label[data-v-074cc5ca]{font-weight:700;margin-bottom:5px}.relation-input[data-v-074cc5ca],.relation-select[data-v-074cc5ca]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-074cc5ca]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-074cc5ca]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-relation-btn[data-v-074cc5ca]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-relation-btn[data-v-074cc5ca]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.rename-node-modal[data-v-7350b5ff]{display:flex;flex-direction:column;padding:1rem}.input-container[data-v-7350b5ff],.input-group[data-v-7350b5ff]{display:flex;flex-direction:column}.field-label[data-v-7350b5ff]{font-weight:700;margin-bottom:5px}.field-input[data-v-7350b5ff]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-7350b5ff]{margin-top:.5rem;display:flex;flex-direction:column}.save-btn[data-v-7350b5ff]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-btn[data-v-7350b5ff]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.vue-flow-container[data-v-87b25a7b]{height:100%;display:flex}.vue-flow-viewport[data-v-87b25a7b]{position:relative;flex:1;display:flex}.viewport-wrapper[data-v-87b25a7b]{width:100%;height:100%}.toggle-grid-button[data-v-87b25a7b]{caret-color:transparent;position:absolute;top:10px;right:10px;background-color:var(--color-primary);color:#000;border:2px solid black;padding:3px 6px;font-weight:700;border-radius:8px;cursor:pointer;z-index:10;box-shadow:2px 2px #000}.toggle-grid-button[data-v-87b25a7b]:hover{box-shadow:0 0 #000;transform:translate(2px,2px)}.create-wrapper[data-v-87b25a7b]{position:absolute;top:10px;left:10px;display:flex;align-items:center}.create-circle[data-v-87b25a7b]{width:40px;height:40px;background-color:var(--color-primary);border:2px solid black;color:#000;border-radius:50%;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:700;z-index:10;box-shadow:2px 2px #000}.create-circle[data-v-87b25a7b]:hover{box-shadow:0 0 #000;transform:translate(2px,2px)}.floating-create-expanded[data-v-87b25a7b]{display:flex;align-items:center;background:var(--color-primary);border:2px solid black;border-radius:50px;height:40px;padding:0 10px;gap:8px;z-index:1000;margin-top:2px;margin-left:2px}.collapse-btn[data-v-87b25a7b]{display:grid;place-items:center;width:24px;height:24px;padding:0;cursor:pointer;background:none;border:none}.collapse-btn svg[data-v-87b25a7b]{width:20px;height:20px}.create-model-input[data-v-87b25a7b]{height:26px;border:2px solid black;border-radius:6px;padding:0 10px;width:160px}.create-model-btn[data-v-87b25a7b]{height:30px;border:2px solid black;border-radius:6px;cursor:pointer;font-weight:700;background-color:var(--color-secondary);margin-right:5px}.create-model-btn[data-v-87b25a7b]:hover{background-color:var(--color-success)}.field-modal-container[data-v-33da89f7]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-33da89f7]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-33da89f7]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-33da89f7]{font-weight:700;margin-bottom:5px}.field-input[data-v-33da89f7]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-33da89f7]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-33da89f7]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-33da89f7]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.field-modal-container[data-v-08474887]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-08474887]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-08474887]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-08474887]{font-weight:700;margin-bottom:5px}.field-input[data-v-08474887]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-08474887]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-08474887]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-08474887]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.layout-container[data-v-c7d104ef]{display:flex;height:100%;min-height:0}.enum-sidebar[data-v-c7d104ef]{width:250px;border-right:2px solid black;display:flex;flex-direction:column;background-color:#fff}.enum-list[data-v-c7d104ef]{flex:1;padding:5px;overflow-y:auto}.enum-item[data-v-c7d104ef]{padding:10px 15px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;border-radius:8px;border:2px solid transparent}.enum-item.active[data-v-c7d104ef],.enum-item[data-v-c7d104ef]:hover{background-color:var(--color-primary);font-weight:700;border-color:#000}.enum-name-wrapper[data-v-c7d104ef]{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:8px}.enum-name-edit-input[data-v-c7d104ef]{width:100%;background:none;border:2px solid black;border-radius:4px;padding:2px 5px;box-sizing:border-box;background-color:#fff}.enum-item-actions[data-v-c7d104ef]{display:flex;gap:0;align-items:center}.edit-enum-toggle-btn[data-v-c7d104ef]{background:none;border:none;font-size:16px;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px}.edit-enum-toggle-btn[data-v-c7d104ef]:hover{color:var(--color-success)}.delete-enum-btn[data-v-c7d104ef]{background:none;border:none;font-size:18px;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.delete-enum-btn[data-v-c7d104ef]:hover{color:red}.main-header[data-v-c7d104ef]{height:50px;border-bottom:2px solid black;position:sticky;top:0;background-color:inherit;z-index:1;display:flex;justify-content:space-between;align-items:center;padding:0 15px}.enum-title[data-v-c7d104ef]{font-size:1.2rem;font-weight:700}.main-content[data-v-c7d104ef]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.main-table[data-v-c7d104ef]{width:100%;border-collapse:collapse;display:flex;flex-direction:column;flex:1;min-height:0}.main-table thead[data-v-c7d104ef]{display:table;width:100%;table-layout:fixed}.main-table tbody[data-v-c7d104ef]{display:block;overflow-y:auto;flex:1;width:100%}.main-table tr[data-v-c7d104ef]{display:table;width:100%;table-layout:fixed}.main-table th[data-v-c7d104ef],.main-table td[data-v-c7d104ef]{padding:16px;text-align:left;border-bottom:2px solid black}.action-column[data-v-c7d104ef]{width:20%;text-align:right!important}.action-content[data-v-c7d104ef]{margin-right:15px}.enum-actions[data-v-c7d104ef]{cursor:pointer;display:flex;justify-content:flex-end;position:relative}.dropdown-list[data-v-c7d104ef]{position:absolute;border:2px solid black;border-radius:5px;background:#fff;z-index:100;padding:4px;left:0;min-width:100px}.dropdown-item[data-v-c7d104ef]{height:35px;width:100%;display:flex;align-items:center;padding:0 5px;box-sizing:border-box;border:2px solid transparent;border-radius:5px}.dropdown-item[data-v-c7d104ef]:hover{border:2px solid black;cursor:pointer}.main-footer[data-v-c7d104ef]{height:50px;border-top:2px solid black;position:sticky;bottom:0;padding:0 15px;display:flex;align-items:center;justify-content:flex-end}.input-group[data-v-c7d104ef]{display:flex;flex-direction:column;gap:.1rem;padding:10px}.project-name-label[data-v-c7d104ef]{font-weight:700;margin-bottom:.25rem}.input-horizontal[data-v-c7d104ef]{display:flex;align-items:center;gap:.5rem}.confirm-btn[data-v-c7d104ef]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-background);padding:.25rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;height:2.125rem;font-weight:700}.confirm-btn[data-v-c7d104ef]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s;background-color:var(--color-success)}.confirm-btn[data-v-c7d104ef]:disabled{opacity:.6;cursor:not-allowed;background-color:var(--color-background)}.project-name[data-v-c7d104ef]{width:100%;padding:.5rem;border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.project-name[data-v-c7d104ef]:focus{outline:none;transform:translate(2px,2px);box-shadow:0 0 #000}.label-group[data-v-c7d104ef]{display:flex;justify-content:space-between;align-items:center}.add-btn[data-v-c7d104ef]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-success);padding:.5rem 1rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;font-weight:700}.add-btn[data-v-c7d104ef]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s}.container[data-v-b0fef25d]{width:100%;height:100vh;display:flex;justify-content:center;align-items:center;background-color:#fff}.editor-container[data-v-b0fef25d]{width:1000px;height:500px;background-color:#fff;border:2px solid black;display:flex;flex-direction:column;overflow:hidden}.editor-header[data-v-b0fef25d]{height:40px;display:flex;align-items:center;background-color:var(--color-primary);width:100%;border-bottom:2px solid black;box-sizing:border-box}.header-section[data-v-b0fef25d]{flex:1;text-align:center;cursor:pointer;font-weight:700;display:flex;align-items:center;justify-content:center;height:100%;-webkit-user-select:none;user-select:none}.header-divider[data-v-b0fef25d]{width:2px;height:100%;background-color:#000}.editor-content[data-v-b0fef25d]{position:relative;flex:1;width:100%;height:calc(100% - 40px)}.container[data-v-33ee6271]{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:column}.container[data-v-432690c7]{min-width:600px;margin:0 auto;font-family:Arial,sans-serif;padding:1rem}h1[data-v-432690c7]{text-align:center;margin-bottom:2rem;font-weight:700}.category-section[data-v-432690c7]{margin-bottom:2rem}.category-section h2[data-v-432690c7]{margin-bottom:1rem;font-size:1.3rem;font-weight:700}.feature-grid[data-v-432690c7]{display:grid;grid-template-columns:repeat(3,100px);gap:2rem 2rem;justify-content:start}.feature-item[data-v-432690c7]{border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;width:100px;height:100px;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer;background-color:var(--color-background, white);transition:all .1s ease-in-out;-webkit-user-select:none;user-select:none;text-align:center;padding:.5rem}.feature-item[data-v-432690c7]:hover,.feature-item.selected[data-v-432690c7]{transform:translate(2px,2px);box-shadow:none;background-color:var(--color-success, #4caf50);color:#fff}.feature-item.selected[data-v-432690c7]:hover{background-color:var(--color-background, white);color:#000;transform:translate(0);box-shadow:3px 3px #000}.feature-icon[data-v-432690c7]{margin-bottom:.25rem}.feature-label[data-v-432690c7]{font-size:.8rem;font-weight:700;line-height:1.1}.container[data-v-9243bc5e]{display:flex;flex-direction:column;align-items:center;width:100%;max-width:360px;min-width:360px}.modal-backdrop[data-v-d61e0035]{position:fixed;inset:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal[data-v-d61e0035]{border:2px solid black;border-radius:6px;overflow:hidden;background-color:#fff;max-width:350px;width:100%;margin:0 1rem;display:flex;flex-direction:column;background-color:var(--color-secondary)}.modal-header[data-v-d61e0035]{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem}.modal-title[data-v-d61e0035]{font-weight:700;flex-grow:1;display:flex;align-items:center;font-size:1rem}.modal-actions[data-v-d61e0035]{cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.modal-body[data-v-d61e0035]{overflow:hidden;background-color:var(--color-secondary)}html,body{height:100%;margin:0}#app{display:flex;flex-direction:column;height:100%;background-color:var(--color-background)}.header{height:60px;position:sticky;flex-shrink:0;background-color:#fff;border-bottom:4px solid black;top:0;display:flex;align-items:center}.content{flex-grow:1;padding:1rem}.logo{display:flex;align-items:center;gap:.5rem;margin-left:1rem}.github-icon{width:20px;height:20px;border:2px solid black;border-radius:15%;padding:.25rem;box-shadow:2px 2px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.github-icon:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer}.github-icon:visited,.github-icon:active,.github-icon:focus{color:#000} diff --git a/fastapi_forge/static/favicon.ico b/fastapi_forge/static/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/fastapi_forge/static/favicon.ico differ diff --git a/fastapi_forge/static/index.html b/fastapi_forge/static/index.html new file mode 100644 index 0000000..be1c913 --- /dev/null +++ b/fastapi_forge/static/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Vite App + + + + + + + + diff --git a/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml b/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml index 3e938e6..752d437 100644 --- a/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml +++ b/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml @@ -142,4 +142,4 @@ show_error_codes = true implicit_reexport = true disable_error_code = ["prop-decorator", "override", "import-untyped"] plugins = ["pydantic.mypy", {% if cookiecutter.use_postgres -%}"sqlalchemy.ext.mypy.plugin"{% endif %}] -exclude = ["migrations"] +exclude = ["migrations"] \ No newline at end of file diff --git a/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py b/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py index a1f1829..59ddb94 100644 --- a/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py +++ b/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py @@ -16,14 +16,15 @@ class HTTPBearer(_HTTPBearer): Returns access token as str. """ - async def __call__(self, request: Request) -> str | None: # type: ignore + async def __call__(self, request: Request) -> str | None: """Return access token.""" try: obj = await super().__call__(request) - return obj.credentials if obj else None - except HTTPException: + except HTTPException as err: msg = "Missing token." - raise exceptions.Http401(msg) + raise exceptions.Http401(msg) from err + else: + return obj.credentials if obj else None auth_scheme = HTTPBearer() diff --git a/fastapi_forge/type_info_registry.py b/fastapi_forge/type_info_registry.py index dc0fcec..f4d29c6 100644 --- a/fastapi_forge/type_info_registry.py +++ b/fastapi_forge/type_info_registry.py @@ -5,6 +5,7 @@ from pydantic.dataclasses import dataclass from fastapi_forge.enums import FieldDataTypeEnum +from fastapi_forge.logger import logger EnumName = Annotated[str, Field(...)] @@ -48,9 +49,10 @@ def __init__(self) -> None: def register(self, key: T, data_type: TypeInfo) -> None: if key in self: - raise KeyError( + logger.error( f"{self.__class__.__name__}: Key '{key}' is already registered." ) + return self._registry[key] = data_type def get(self, key: T) -> TypeInfo: diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..86c2b2c --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,9 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +end_of_line = lf +max_line_length = 80 diff --git a/frontend/.gitattributes b/frontend/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/frontend/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/frontend/.prettierrc.json b/frontend/.prettierrc.json new file mode 100644 index 0000000..08e40b6 --- /dev/null +++ b/frontend/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "singleQuote": false, + "printWidth": 100 +} diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..c92168f --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode" + ] +} diff --git a/fastapi_forge/frontend/__init__.py b/frontend/README.md similarity index 100% rename from fastapi_forge/frontend/__init__.py rename to frontend/README.md diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/eslint.config.ts b/frontend/eslint.config.ts new file mode 100644 index 0000000..20475f8 --- /dev/null +++ b/frontend/eslint.config.ts @@ -0,0 +1,22 @@ +import { globalIgnores } from 'eslint/config' +import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' +import pluginVue from 'eslint-plugin-vue' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: +// import { configureVueProject } from '@vue/eslint-config-typescript' +// configureVueProject({ scriptLangs: ['ts', 'tsx'] }) +// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + skipFormatting, +) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..1ba50ec --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Vite App + + + + + + + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..7ba709a --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5365 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@vue-flow/background": "^1.3.2", + "@vue-flow/core": "^1.45.0", + "cytoscape": "^3.32.1", + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-toastification": "^2.0.0-rc.5" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "^7.0.0", + "vite-plugin-vue-devtools": "^7.7.7", + "vue-tsc": "^2.2.10" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", + "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tsconfig/node22": { + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.2.tgz", + "integrity": "sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", + "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", + "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.19" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-flow/background": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@vue-flow/background/-/background-1.3.2.tgz", + "integrity": "sha512-eJPhDcLj1wEo45bBoqTXw1uhl0yK2RaQGnEINqvvBsAFKh/camHJd5NPmOdS1w+M9lggc9igUewxaEd3iCQX2w==", + "license": "MIT", + "peerDependencies": { + "@vue-flow/core": "^1.23.0", + "vue": "^3.3.0" + } + }, + "node_modules/@vue-flow/core": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@vue-flow/core/-/core-1.45.0.tgz", + "integrity": "sha512-+Qd4fTnCfrhfYQzlHyf5Jt7rNE4PlDnEJEJZH9v6hDZoTOeOy1RhS85cSxKYxdsJ31Ttj2v3yabhoVfBf+bmJA==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "^10.5.0", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz", + "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz", + "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "@vue/babel-helper-vue-transform-on": "1.4.0", + "@vue/babel-plugin-resolve-type": "1.4.0", + "@vue/shared": "^3.5.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz", + "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/parser": "^7.26.9", + "@vue/compiler-sfc": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.7.tgz", + "integrity": "sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "mitt": "^3.0.1", + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.2.0.tgz", + "integrity": "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.2" + }, + "peerDependencies": { + "eslint": ">= 8.21.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.6.0.tgz", + "integrity": "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.35.1", + "fast-glob": "^3.3.3", + "typescript-eslint": "^8.35.1", + "vue-eslint-parser": "^10.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0", + "eslint-plugin-vue": "^9.28.0 || ^10.0.0", + "typescript": ">=4.8.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "vue": "3.5.18" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", + "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.1.tgz", + "integrity": "sha512-dbeqFTLYEwlFg7UGtcZhCCG/2WayX72zK3Sq323CEX29CY81tYfVhw1MIdduCtpstB0cTOhJswWlM/OEB3Xp+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.190", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.190.tgz", + "integrity": "sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.31.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.2.0.tgz", + "integrity": "sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.0.tgz", + "integrity": "sha512-NWDAhdnATItTnRhip9VTd8oXDjVcbhetRN6YzckApnXGxpGUooKMAaf0KVvlZG0+KlJMGkeLElVn4M1ReuxKUQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-all2": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-8.0.4.tgz", + "integrity": "sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.6", + "memorystream": "^0.3.1", + "picomatch": "^4.0.2", + "pidtree": "^0.6.0", + "read-package-json-fast": "^4.0.0", + "shell-quote": "^1.7.3", + "which": "^5.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^20.5.0 || >=22.0.0", + "npm": ">= 10" + } + }, + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm-run-all2/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm-run-all2/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm-run-all2/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.7.tgz", + "integrity": "sha512-d0fIh3wRcgSlr4Vz7bAk4va1MkdqhQgj9ANE/rBhsAjOnRfTLs2ocjFMvSUOsv6SRRXU9G+VM7yMgqDb6yI4iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^7.7.7", + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "execa": "^9.5.2", + "sirv": "^3.0.1", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz", + "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-toastification": { + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", + "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.2" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..97f7b8e --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,40 @@ +{ + "name": "frontend", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build", + "lint": "eslint . --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "@vue-flow/background": "^1.3.2", + "@vue-flow/core": "^1.45.0", + "cytoscape": "^3.32.1", + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-toastification": "^2.0.0-rc.5" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "^7.0.0", + "vite-plugin-vue-devtools": "^7.7.7", + "vue-tsc": "^2.2.10" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/frontend/public/favicon.ico differ diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..a5733c9 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,107 @@ + + + + + FastAPI Forge + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css new file mode 100644 index 0000000..e5e2536 --- /dev/null +++ b/frontend/src/assets/main.css @@ -0,0 +1,32 @@ +body { + font-family: "DM Sans", sans-serif; + font-optical-sizing: auto; +} + +:root { + --color-primary: #5294fd; + --color-secondary: #dcebfe; + --color-success: #7fbc8c; + --color-danger: #ff6b6b; + --color-warning: #f5c26b; + --color-background: #f4f4f0; +} + +.Vue-Toastification__toast { + border: 2px solid black; + border-radius: 0px !important; + color: black !important; + box-shadow: 2px 2px 0px !important; +} + +.Vue-Toastification__toast--success.container-class { + background-color: var(--color-success); +} + +.Vue-Toastification__toast--error.container-class { + background-color: var(--color-danger); +} + +.Vue-Toastification__toast--warning.container-class { + background-color: var(--color-warning); +} diff --git a/frontend/src/components/StepWizard.vue b/frontend/src/components/StepWizard.vue new file mode 100644 index 0000000..61b73eb --- /dev/null +++ b/frontend/src/components/StepWizard.vue @@ -0,0 +1,141 @@ + + + + + + + + + + + + Previous + + Next + + + + + + + + diff --git a/frontend/src/components/ValidatedInput.vue b/frontend/src/components/ValidatedInput.vue new file mode 100644 index 0000000..7ad03d6 --- /dev/null +++ b/frontend/src/components/ValidatedInput.vue @@ -0,0 +1,90 @@ + + + {{ label }} + + + + {{ error }} + + + + + + diff --git a/frontend/src/components/modal/AddEnumValueModal.vue b/frontend/src/components/modal/AddEnumValueModal.vue new file mode 100644 index 0000000..f340cfe --- /dev/null +++ b/frontend/src/components/modal/AddEnumValueModal.vue @@ -0,0 +1,107 @@ + + + + + Name + + + + + Value + + + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/AddFieldModal.vue b/frontend/src/components/modal/AddFieldModal.vue new file mode 100644 index 0000000..ce6aec5 --- /dev/null +++ b/frontend/src/components/modal/AddFieldModal.vue @@ -0,0 +1,224 @@ + + + + + Field name + + + + + Type + + -- Select type -- + String + Int + UUID + DateTime + Boolean + Float + Enum + + + + + Select Enum + + -- Select Enum -- + + {{ e.name }} + + + + + + Default value + + + + {{ v.name }} + + + + + + + + Primary key + Nullable + Unique + Index + + + + Timestamp + Created + Updated + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/AddRelationModal.vue b/frontend/src/components/modal/AddRelationModal.vue new file mode 100644 index 0000000..0263e73 --- /dev/null +++ b/frontend/src/components/modal/AddRelationModal.vue @@ -0,0 +1,154 @@ + + + + + Field name + + + + + Target model + + -- Select a model -- + + {{ node.id }} + + + + + + OnDelete + + -- Select behavior -- + CASCADE + SET_NULL + + + + + Back populates + + + + + + Nullable + Unique + Index + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/EditEnumValueModal.vue b/frontend/src/components/modal/EditEnumValueModal.vue new file mode 100644 index 0000000..ebf42f3 --- /dev/null +++ b/frontend/src/components/modal/EditEnumValueModal.vue @@ -0,0 +1,111 @@ + + + + + Name + + + + + Value + + + + + + Save + + + + + + + + +function showDangerToast(modelName: any) { throw new Error("Function not implemented."); } diff --git a/frontend/src/components/modal/EditFieldModal.vue b/frontend/src/components/modal/EditFieldModal.vue new file mode 100644 index 0000000..ed4fab2 --- /dev/null +++ b/frontend/src/components/modal/EditFieldModal.vue @@ -0,0 +1,269 @@ + + + + + Field name + + + + + Type + + -- Select type -- + String + Int + UUID + DateTime + Boolean + Float + Enum + + + + + Select Enum + + -- Select Enum -- + + {{ e.name }} + + + + + + Default value + + + + {{ v.name }} + + + + + + + + Primary key + Nullable + Unique + Index + + + + Timestamp + Created + Updated + + + + Save + Delete + + + + + + + diff --git a/frontend/src/components/modal/EditRelationModal.vue b/frontend/src/components/modal/EditRelationModal.vue new file mode 100644 index 0000000..7a3adfa --- /dev/null +++ b/frontend/src/components/modal/EditRelationModal.vue @@ -0,0 +1,192 @@ + + + + + Field name + + + + + Target model + + -- Select a model -- + + {{ node.id }} + + + + + + OnDelete + + -- Select behavior -- + CASCADE + SET_NULL + + + + + Back populates + + + + + + Nullable + Unique + Index + + + + Delete + Save + + + + + + + diff --git a/frontend/src/components/modal/GlobalModal.vue b/frontend/src/components/modal/GlobalModal.vue new file mode 100644 index 0000000..f7eec03 --- /dev/null +++ b/frontend/src/components/modal/GlobalModal.vue @@ -0,0 +1,102 @@ + + + + + + + {{ modalTitle }} + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/modal/RenameNodeModal.vue b/frontend/src/components/modal/RenameNodeModal.vue new file mode 100644 index 0000000..2c68551 --- /dev/null +++ b/frontend/src/components/modal/RenameNodeModal.vue @@ -0,0 +1,100 @@ + + + + + New model name + + + + + + Rename + + + + + + + diff --git a/frontend/src/components/schema_editor/CustomNode.vue b/frontend/src/components/schema_editor/CustomNode.vue new file mode 100644 index 0000000..c04a937 --- /dev/null +++ b/frontend/src/components/schema_editor/CustomNode.vue @@ -0,0 +1,181 @@ + + + + + {{ id }} + + + + + + + + + Add Field + Add Relation + Rename + Delete + + + + + + {{ field.name }} + {{ field.type }} + {{ field.type }}({{ field.typeEnum }}) + + + {{ relation.fieldName }} + {{ relation.targetModel }} + + + + + + + + diff --git a/frontend/src/components/schema_editor/EnumEditor.vue b/frontend/src/components/schema_editor/EnumEditor.vue new file mode 100644 index 0000000..f1f6180 --- /dev/null +++ b/frontend/src/components/schema_editor/EnumEditor.vue @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + {{ enumItem.name }} + + + + + + + + + + + + + + + + + × + + + + + + + + + Name + Value + Action + + + + + {{ ev.name }} + {{ ev.value }} + + + + + + + + + + Edit + Delete + + + + + + + + + + + + + + + diff --git a/frontend/src/components/schema_editor/SchemaEditor.vue b/frontend/src/components/schema_editor/SchemaEditor.vue new file mode 100644 index 0000000..f0d22b9 --- /dev/null +++ b/frontend/src/components/schema_editor/SchemaEditor.vue @@ -0,0 +1,260 @@ + + + + + # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/schema_editor/Viewport.vue b/frontend/src/components/schema_editor/Viewport.vue new file mode 100644 index 0000000..428b133 --- /dev/null +++ b/frontend/src/components/schema_editor/Viewport.vue @@ -0,0 +1,92 @@ + + + + + + Models + + + + Enums + + + + + + + + + + + + + + diff --git a/frontend/src/components/steps/DatabaseStep.vue b/frontend/src/components/steps/DatabaseStep.vue new file mode 100644 index 0000000..cb39d73 --- /dev/null +++ b/frontend/src/components/steps/DatabaseStep.vue @@ -0,0 +1,114 @@ + + + Choose a Database + + + + + {{ db }} + + + + + + + + + diff --git a/frontend/src/components/steps/FeatureSelectionStep.vue b/frontend/src/components/steps/FeatureSelectionStep.vue new file mode 100644 index 0000000..0e23489 --- /dev/null +++ b/frontend/src/components/steps/FeatureSelectionStep.vue @@ -0,0 +1,193 @@ + + + Project Features + + + {{ category }} + + + + {{ feature.label }} + + + + + + + + + diff --git a/frontend/src/components/steps/GenerationStep.vue b/frontend/src/components/steps/GenerationStep.vue new file mode 100644 index 0000000..7581f19 --- /dev/null +++ b/frontend/src/components/steps/GenerationStep.vue @@ -0,0 +1,25 @@ + + + Generate + GENERATE :P + + + + + + + diff --git a/frontend/src/components/steps/ProjectNameStep.vue b/frontend/src/components/steps/ProjectNameStep.vue new file mode 100644 index 0000000..6ceb2e3 --- /dev/null +++ b/frontend/src/components/steps/ProjectNameStep.vue @@ -0,0 +1,184 @@ + + + Choose a Project Name + + + + Project Name + + + + + Confirm + + + + {{ errorMessage }} + + + + + + + + diff --git a/frontend/src/components/steps/SchemaStep.vue b/frontend/src/components/steps/SchemaStep.vue new file mode 100644 index 0000000..b9ac90c --- /dev/null +++ b/frontend/src/components/steps/SchemaStep.vue @@ -0,0 +1,24 @@ + + + Design your Schema + + + + + + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..f1dba80 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,21 @@ +import "./assets/main.css" +import "vue-toastification/dist/index.css" + +import { createApp } from "vue" +import { createPinia } from "pinia" +import Toast, { POSITION, type PluginOptions } from "vue-toastification" +import App from "./App.vue" + +const app = createApp(App) + +app.use(createPinia()) + +const options: PluginOptions = { + position: POSITION.TOP_CENTER, + shareAppContext: true, + containerClassName: "container-class", +} + +app.use(Toast, options) + +app.mount("#app") diff --git a/frontend/src/stores/useModalStore.ts b/frontend/src/stores/useModalStore.ts new file mode 100644 index 0000000..a7246c0 --- /dev/null +++ b/frontend/src/stores/useModalStore.ts @@ -0,0 +1,32 @@ +import { defineStore } from "pinia" +import { ref, shallowRef, markRaw, type Component } from "vue" + +export const useModalStore = defineStore("modal", () => { + const isOpen = ref(false) + const modalTitle = ref("") + const currentComponent = shallowRef(null) + const props = ref>({}) + + function open(title: string, component: Component, componentProps: Record = {}) { + currentComponent.value = markRaw(component) + props.value = componentProps + modalTitle.value = title + isOpen.value = true + } + + function close() { + isOpen.value = false + currentComponent.value = null + props.value = {} + modalTitle.value = "" + } + + return { + isOpen, + modalTitle, + currentComponent, + props, + open, + close, + } +}) diff --git a/frontend/src/stores/useProjectStore.ts b/frontend/src/stores/useProjectStore.ts new file mode 100644 index 0000000..d06c430 --- /dev/null +++ b/frontend/src/stores/useProjectStore.ts @@ -0,0 +1,419 @@ +import { defineStore } from "pinia" +import { ref } from "vue" +import type { Ref } from "vue" +import type { + NodesArray, + EdgesArray, + EnumsArray, + NodeT, + EdgeT, + RelationalField, + RelationalRelationField, + EnumValue, + EnumT, +} from "@/types/types.ts" + +export const useProjectStore = defineStore("projectSpec", () => { + const projectSpec = ref({ project_name: "asd", database: "", models: [], custom_enums: [] }) + const isProjectNameConfirmed = ref(false) + + const enums: Ref = ref([ + { + name: "UserRole", + values: [ + { name: "ADMIN", value: "ADMIN" }, + { name: "USER", value: "auto()" }, + ], + }, + ]) + + const nodes: Ref = ref([ + { + id: "user", + data: { + fields: [ + { name: "id", type: "UUID", isPrimaryKey: true, defaultValue: "uuid.uuid4" }, + { name: "name", type: "String" }, + { name: "email", type: "String" }, + { name: "role", type: "Enum", typeEnum: "UserRole", defaultValue: "ADMIN" }, + { name: "created_at", type: "DateTime" }, + { name: "updated_at", type: "DateTime" }, + ], + relations: [ + { + fieldName: "post_id", + targetModel: "post", + onDelete: "CASCADE", + isNullable: false, + isUnique: false, + isIndex: false, + }, + ], + }, + type: "custom", + position: { x: 50, y: 50 }, + }, + { + id: "post", + data: { + fields: [ + { name: "id", type: "UUID", isPrimaryKey: true, defaultValue: "uuid.uuid4" }, + { name: "created_at", type: "DateTime" }, + { name: "updated_at", type: "DateTime" }, + ], + relations: [], + }, + type: "custom", + position: { x: 150, y: 355 }, + }, + ]) + + const edges: Ref = ref([ + { + id: "(user)-(post)-(post_id)", + source: "user", + target: "post", + type: "smoothstep", + }, + ]) + + const convertToPayload = () => { + const models = nodes.value.map((node) => { + const modelName = node.id + + const fields = node.data.fields.map((field) => { + return { + name: field.name, + type: field.type, + type_enum: field.typeEnum ?? null, + primary_key: field.isPrimaryKey ?? false, + nullable: field.isNullable ?? false, + unique: field.isUnique ?? false, + index: field.isIndex ?? false, + default_value: field.defaultValue ?? null, + extra_kwargs: null, + metadata: { + is_created_at_timestamp: field.name === "created_at", + is_updated_at_timestamp: field.name === "updated_at", + is_foreign_key: false, + }, + } + }) + + const relationships = node.data.relations.map((relation) => { + return { + field_name: relation.fieldName, + target_model: relation.targetModel, + back_populates: null, + on_delete: relation.onDelete ?? "CASCADE", + nullable: relation.isNullable ?? false, + unique: relation.isUnique ?? false, + index: relation.isIndex ?? false, + } + }) + + return { + name: modelName, + fields, + relationships, + metadata: { + create_endpoints: true, + create_tests: true, + create_daos: true, + create_dtos: true, + is_auth_model: false, + }, + } + }) + + const custom_enums = enums.value.map((enm) => { + return { + name: enm.name, + values: enm.values.map((val) => ({ + name: val.name, + value: val.value, + })), + } + }) + + return { + project_name: projectSpec.value.project_name, + use_postgres: true, + use_alembic: true, + models, + custom_enums, + } + } + + const callGenerateEndpoint = async () => { + const payload = convertToPayload() + + try { + const response = await fetch("http://localhost:8000/generate", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }) + + if (!response.ok) { + const errorText = await response.text() + throw new Error(`Error ${response.status}: ${errorText}`) + } + + const result = await response.json() + console.log("Generation successful:", result) + return result + } catch (error) { + console.error("Generation failed:", error) + throw error + } + } + + const findNodeById = (id: string): NodeT | undefined => { + return nodes.value.find((node) => node.id === id) + } + + const createNode = (id: string): void => { + if (findNodeById(id)) return + nodes.value.push({ + id, + data: { fields: [], relations: [] }, + type: "custom", + position: { x: 100, y: 100 }, + }) + } + + const deleteNode = (id: string): void => { + const node = findNodeById(id) + if (!node) return + nodes.value = nodes.value.filter((node) => node.id !== id) + edges.value = edges.value.filter((edge) => edge.source !== id && edge.target !== id) + nodes.value.forEach((node) => { + if (node.data.relations) { + node.data.relations = node.data.relations?.filter((relation) => relation.targetModel !== id) + } + }) + } + + const renameNode = (source: string, newName: string) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + const existingNode = findNodeById(newName) + if (existingNode) throw new Error(`Duplicate name: ${newName}`) + node.id = newName + edges.value.forEach((edge) => { + if (edge.source === source) edge.source = newName + if (edge.target === source) edge.target = newName + edge.id = edge.id.replace(`(${source})`, `(${newName})`) + }) + + nodes.value.forEach((n) => { + n.data.relations.forEach((rel) => { + if (rel.targetModel === source) { + rel.targetModel = newName + } + }) + }) + } + + const nameExistsInModel = (node: NodeT, name: string): boolean => { + const existingFieldname = node.data.fields.find((field) => field.name === name) + const existingRelationFieldName = node.data.relations.find( + (relation) => relation.fieldName === name, + ) + return !!existingFieldname || !!existingRelationFieldName + } + + const addField = (source: string, fieldData: RelationalField) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + if (nameExistsInModel(node, fieldData.name)) + throw new Error(`Field name already exists for model: ${source}`) + node.data.fields.push(fieldData) + } + + const updateField = (source: string, originalFieldName: string, fieldData: RelationalField) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + const fieldIndex = node.data.fields.findIndex((f) => f.name === originalFieldName) + if (fieldIndex === -1) throw new Error(`Field does not exist: ${originalFieldName}`) + node.data.fields[fieldIndex] = fieldData + console.log(fieldData) + } + + const deleteField = (source: string, fieldName: string) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + node.data.fields = node.data.fields.filter((field) => field.name !== fieldName) + } + + const addRelation = ( + source: string, + target: string, + relationData: RelationalRelationField, + ): void => { + const node = findNodeById(source) + if (!node) return + createEdge(source, target, relationData.fieldName) + node.data.relations.push(relationData) + } + + const deleteRelation = (source: string, target: string, fieldName: string) => { + const node = findNodeById(source) + if (!node) return + node.data.relations = node.data.relations.filter((relation) => relation.fieldName !== fieldName) + deleteEdge(source, target, fieldName) + } + + const updateRelation = ( + source: string, + originalTarget: string, + originalFieldName: string, + relationData: RelationalRelationField, + ): void => { + const node = findNodeById(source) + if (!node || !node.data.relations) return + const index = node.data.relations.findIndex((rel) => rel.fieldName === originalFieldName) + node.data.relations[index] = relationData + + const edgeId = formatEdgeId(source, originalTarget, originalFieldName) + const edge = getEdgeById(edgeId) + if (!edge) return + + const newEdgeId = formatEdgeId(source, relationData.targetModel, relationData.fieldName) + edge.id = newEdgeId + edge.source = source + edge.target = relationData.targetModel + } + + const getEdgeById = (id: string): EdgeT | undefined => { + return edges.value.find((edge) => edge.id === id) + } + + const formatEdgeId = (source: string, target: string, fieldName: string): string => { + return `(${source})-(${target})-(${fieldName})` + } + + const createEdge = (source: string, target: string, fieldName: string): void => { + if (source === target) return + edges.value.push({ + id: formatEdgeId(source, target, fieldName), + source, + target, + type: "smoothstep", + }) + } + + const deleteEdge = (source: string, target: string, fieldName: string) => { + edges.value = edges.value.filter((edge) => edge.id !== formatEdgeId(source, target, fieldName)) + } + + const findEnumByName = (name: string): EnumT => { + const en = enums.value.find((e) => e.name === name) + if (!en) throw Error(`Enum not found: ${name}`) + return en + } + + const findEnumValue = (enumName: string, enumValueName: string): EnumValue => { + const en = findEnumByName(enumName) + const ev = en.values.find((v) => v.name === enumValueName) + if (!ev) throw Error(`EnumValue not found: ${enumValueName}`) + return ev + } + + const addEnum = (name: string): EnumT => { + const newEnum = { name: name, values: [] } + enums.value.push(newEnum) + return newEnum + } + const updateEnumName = (oldName: string, newName: string) => { + const en = findEnumByName(oldName) + en.name = newName + nodes.value.forEach((n) => { + n.data.fields.forEach((f) => { + if (f.type === "Enum" && f.typeEnum === oldName) { + f.typeEnum = newName + } + }) + }) + } + const deleteEnum = (name: string) => { + enums.value = enums.value.filter((e) => e.name !== name) + nodes.value.forEach((n) => { + n.data.fields = n.data.fields.filter((f) => f.typeEnum !== name) + }) + } + + const addEnumValue = (enumName: string, enumValue: EnumValue) => { + const en = findEnumByName(enumName) + en.values.push(enumValue) + } + const updateEnumValue = (enumName: string, enumValueName: string, newEnumValue: EnumValue) => { + const ev = findEnumValue(enumName, enumValueName) + ev.name = newEnumValue.name + ev.value = newEnumValue.value + + console.log(enumName) + console.log(newEnumValue) + + nodes.value.forEach((n) => { + n.data.fields.forEach((f) => { + if (f.type === "Enum" && f.typeEnum === enumName) { + f.defaultValue = newEnumValue.name + } + }) + }) + } + const deleteEnumValue = (enumName: string, enumValueName: string) => { + const en = findEnumByName(enumName) + en.values = en.values.filter((e) => e.name !== enumValueName) + } + + const setProjectName = (projectName: string): void => { + projectSpec.value.project_name = projectName + } + const getProjectName = (): string => { + return projectSpec.value.project_name + } + + const setDatabase = (database: string): void => { + projectSpec.value.database = database + } + const getDatabase = (): string => { + return projectSpec.value.database + } + + return { + nodes, + edges, + enums, + createNode, + createEdge, + deleteNode, + renameNode, + addField, + deleteField, + updateField, + addRelation, + deleteRelation, + updateRelation, + projectSpec, + isProjectNameConfirmed, + setProjectName, + getProjectName, + setDatabase, + getDatabase, + findNodeById, + findEnumByName, + addEnum, + updateEnumName, + deleteEnum, + addEnumValue, + updateEnumValue, + deleteEnumValue, + convertNodesToModel: convertToPayload, + callGenerateEndpoint, + } +}) diff --git a/frontend/src/types/types.ts b/frontend/src/types/types.ts new file mode 100644 index 0000000..62b02bd --- /dev/null +++ b/frontend/src/types/types.ts @@ -0,0 +1,69 @@ +export interface Position2D { + x: number + y: number +} + +export type FieldType = "String" | "UUID" | "DateTime" | "Number" | "Boolean" | "String" | "Enum" + +export interface RelationalFieldMetadata { + isCreatedAtTimestamp?: boolean + isUpdatedAtTimestamp?: boolean +} + +export interface RelationalField { + name: string + type: FieldType + typeEnum?: string + isPrimaryKey?: boolean + isNullable?: boolean + isUnique?: boolean + isIndex?: boolean + defaultValue?: string + metadata?: RelationalFieldMetadata + extraKwargs?: object +} + +export type OnDeleteType = "CASCADE" | "SET NULL" + +export interface RelationalRelationField { + fieldName: string + targetModel: string + onDelete: OnDeleteType + backPopulates?: string + isNullable?: boolean + isUnique?: boolean + isIndex?: boolean +} + +export interface RelationalNodeData { + fields: Array + relations: Array +} + +export interface NodeT { + id: string + data: RelationalNodeData + type: string + position: Position2D +} + +export interface EdgeT { + id: string + source: string + target: string + type: string +} + +export interface EnumValue { + name: string + value: string +} + +export interface EnumT { + name: string + values: Array +} + +export type NodesArray = Array +export type EdgesArray = Array +export type EnumsArray = Array diff --git a/frontend/src/utils/toast.ts b/frontend/src/utils/toast.ts new file mode 100644 index 0000000..9e90554 --- /dev/null +++ b/frontend/src/utils/toast.ts @@ -0,0 +1,14 @@ +import { useToast } from "vue-toastification" +const toast = useToast() + +export const showSuccessToast = (msg: string) => { + toast.success(msg, { toastClassName: "container-class" }) +} + +export const showDangerToast = (msg: string) => { + toast.error(msg, { toastClassName: "container-class" }) +} + +export const showWarningToast = (msg: string) => { + toast.warning(msg, { toastClassName: "container-class" }) +} diff --git a/frontend/src/utils/validation.ts b/frontend/src/utils/validation.ts new file mode 100644 index 0000000..fb78424 --- /dev/null +++ b/frontend/src/utils/validation.ts @@ -0,0 +1,34 @@ +const patterns = { + boundedStr: /^.{1,100}$/, + snakeCase: /^[a-z][a-z0-9_]*$/, + pascalCase: /^[A-Z][a-z]*$/, + enumStr: /^[a-zA-Z][a-zA-Z0-9_]*$/, + variableStr: /^[a-zA-Z_][a-zA-Z0-9_-]*$/, +} + +export const isValidProjectName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidModelName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidEnumName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.pascalCase.test(value) +} +export const isValidEnumValueName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidFieldName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.snakeCase.test(value) +} + +export const warningMessages = { + projectName: "Use 1-100 characters. Start with a letter or underscore. Example: my_project1", + modelName: "Use 1-100 characters. Start with a letter or underscore. Example: userModel_1", + enumName: "Use PascalCase (start with uppercase). Example: UserStatus", + enumValueName: "Use 1-100 characters. Start with a letter or underscore. Example: active_status", + fieldName: "Use lowercase snake_case. Example: user_name", +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..913b8f2 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..a83dfc9 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*", + "eslint.config.*" + ], + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..d6eb786 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,22 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + ], + build: { + outDir: '../fastapi_forge/static', + emptyOutDir: true, + }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +}) diff --git a/pyproject.toml b/pyproject.toml index fc4d66f..28d6668 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,8 @@ authors = [{ name = "mslaursen", email = "mslaursendk@gmail.com" }] [project.urls] Repository = "https://github.com/mslaursen/fastapi-forge.git" -[tool.setuptools_scm] +[tool.setuptools] +py-modules = ["fastapi_forge"] [project.scripts] fastapi-forge = "fastapi_forge.__main__:main" diff --git a/tests/test_type_registry.py b/tests/test_type_registry.py index cb439c8..90a14a3 100644 --- a/tests/test_type_registry.py +++ b/tests/test_type_registry.py @@ -36,29 +36,6 @@ def test_registry_get_not_found(type_info_registry: TypeInfoRegistry) -> None: assert "Key 'Boolean' not found." in str(exc_info.value) -def test_key_already_registered(type_info_registry: TypeInfoRegistry) -> None: - type_info_registry.register( - FieldDataTypeEnum.STRING, - TypeInfo( - sqlalchemy_type="String", - sqlalchemy_prefix=True, - python_type="str", - ), - ) - with pytest.raises(KeyError) as exc_info: - type_info_registry.register( - FieldDataTypeEnum.STRING, - TypeInfo( - sqlalchemy_type="String", - sqlalchemy_prefix=True, - python_type="str", - ), - ) - assert "TypeInfoRegistry: Key 'String' is already registered." in str( - exc_info.value - ) - - ############################## # EnumTypeInfoRegistry tests # ############################## @@ -86,13 +63,3 @@ def test_custom_enum_register_w_values() -> None: type_info = enum_registry.get(enum.name) assert type_info.sqlalchemy_type == 'Enum(enums.HTTPMethod, name="http_method")' assert type_info.faker_field_value == "enums.HTTPMethod.GET" - - -def test_duplicate_custom_enum() -> None: - CustomEnum(name="TEST") - with pytest.raises(KeyError) as exc_info: - CustomEnum(name="TEST") - - assert "EnumTypeInfoRegistry: Key 'TEST' is already registered." in str( - exc_info.value - ) diff --git a/uv.lock b/uv.lock index 70e9045..95dab77 100644 --- a/uv.lock +++ b/uv.lock @@ -303,7 +303,7 @@ wheels = [ [[package]] name = "fastapi-forge" -version = "0.1.dev213+g48eaca0.d20250524" +version = "0.0.0" source = { editable = "." } dependencies = [ { name = "click" },
ne)for(;A<=K;)J(w[A],y,m,!0),A++;else{const se=A,ge=A,Ce=new Map;for(A=ge;A<=ne;A++){const ct=S[A]=R?wn(S[A]):Rt(S[A]);ct.key!=null&&Ce.set(ct.key,A)}let Te,qe=0;const rt=ne-ge+1;let $t=!1,It=0;const mo=new Array(rt);for(A=0;A=rt){J(ct,y,m,!0);continue}let kt;if(ct.key!=null)kt=Ce.get(ct.key);else for(Te=ge;Te<=ne;Te++)if(mo[Te-ge]===0&&Jn(ct,S[Te])){kt=Te;break}kt===void 0?J(ct,y,m,!0):(mo[kt-ge]=A+1,kt>=It?It=kt:$t=!0,E(ct,S[kt],f,null,y,m,I,B,R),qe++)}const cl=$t?xh(mo):Qn;for(Te=cl.length-1,A=rt-1;A>=0;A--){const ct=ge+A,kt=S[ct],dl=S[ct+1],fl=ct+1{const{el:m,type:I,transition:B,children:R,shapeFlag:A}=w;if(A&6){Y(w.component.subTree,S,f,v);return}if(A&128){w.suspense.move(S,f,v);return}if(A&64){I.move(w,S,f,we);return}if(I===_e){o(m,S,f);for(let K=0;KB.enter(m),y);else{const{leave:K,delayLeave:ne,afterLeave:se}=B,ge=()=>{w.ctx.isUnmounted?i(m):o(m,S,f)},Ce=()=>{K(m,()=>{ge(),se&&se()})};ne?ne(m,ge,Ce):Ce()}else o(m,S,f)},J=(w,S,f,v=!1,y=!1)=>{const{type:m,props:I,ref:B,children:R,dynamicChildren:A,shapeFlag:q,patchFlag:K,dirs:ne,cacheIndex:se}=w;if(K===-2&&(y=!1),B!=null&&(dn(),ko(B,null,f,w,!0),fn()),se!=null&&(S.renderCache[se]=void 0),q&256){S.ctx.deactivate(w);return}const ge=q&1&&ne,Ce=!no(w);let Te;if(Ce&&(Te=I&&I.onVnodeBeforeUnmount)&&Pt(Te,S,w),q&6)ie(w.component,f,v);else{if(q&128){w.suspense.unmount(f,v);return}ge&&$n(w,null,S,"beforeUnmount"),q&64?w.type.remove(w,S,f,we,v):A&&!A.hasOnce&&(m!==_e||K>0&&K&64)?le(A,S,f,!1,!0):(m===_e&&K&384||!y&&q&16)&&le(R,S,f),v&&ue(w)}(Ce&&(Te=I&&I.onVnodeUnmounted)||ge)&&ot(()=>{Te&&Pt(Te,S,w),ge&&$n(w,null,S,"unmounted")},f)},ue=w=>{const{type:S,el:f,anchor:v,transition:y}=w;if(S===_e){Q(f,v);return}if(S===Si){_(w);return}const m=()=>{i(f),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(w.shapeFlag&1&&y&&!y.persisted){const{leave:I,delayLeave:B}=y,R=()=>I(f,m);B?B(w.el,m,R):R()}else m()},Q=(w,S)=>{let f;for(;w!==S;)f=p(w),i(w),w=f;i(S)},ie=(w,S,f)=>{const{bum:v,scope:y,job:m,subTree:I,um:B,m:R,a:A,parent:q,slots:{__:K}}=w;Tl(R),Tl(A),v&&xi(v),q&&ce(K)&&K.forEach(ne=>{q.renderCache[ne]=void 0}),y.stop(),m&&(m.flags|=8,J(I,w,S,f)),B&&ot(B,S),ot(()=>{w.isUnmounted=!0},S),S&&S.pendingBranch&&!S.isUnmounted&&w.asyncDep&&!w.asyncResolved&&w.suspenseId===S.pendingId&&(S.deps--,S.deps===0&&S.resolve())},le=(w,S,f,v=!1,y=!1,m=0)=>{for(let I=m;I{if(w.shapeFlag&6)return me(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const S=p(w.anchor||w.el),f=S&&S[Nu];return f?p(f):S};let be=!1;const fe=(w,S,f)=>{w==null?S._vnode&&J(S._vnode,null,null,!0):E(S._vnode||null,w,S,null,null,null,f),S._vnode=w,be||(be=!0,ml(),Eu(),be=!1)},we={p:E,um:J,m:Y,r:ue,mt:T,mc:H,pc:$,pbc:Z,n:me,o:e};return{render:fe,hydrate:void 0,createApp:dh(fe)}}function Os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function In({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function wh(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Xr(e,t,n=!1){const o=e.children,i=t.children;if(ce(o)&&ce(i))for(let s=0;s>1,e[n[l]]0&&(t[o]=n[s-1]),n[s]=o)}}for(s=n.length,r=n[s-1];s-- >0;)n[s]=r,r=t[r];return n}function qu(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:qu(t)}function Tl(e){if(e)for(let t=0;tmt(Eh);function xe(e,t,n){return Ju(e,t,n)}function Ju(e,t,n=Pe){const{immediate:o,deep:i,flush:s,once:r}=n,l=je({},n),a=t&&o||!t&&s!=="post";let u;if(jo){if(s==="sync"){const h=Sh();u=h.__watcherHandles||(h.__watcherHandles=[])}else if(!a){const h=()=>{};return h.stop=Lt,h.resume=Lt,h.pause=Lt,h}}const c=et;l.call=(h,b,E)=>Tt(h,c,b,E);let d=!1;s==="post"?l.scheduler=h=>{ot(h,c&&c.suspense)}:s!=="sync"&&(d=!0,l.scheduler=(h,b)=>{b?h():Gr(h)}),l.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,c&&(h.id=c.uid,h.i=c))};const p=Rf(e,t,l);return jo&&(u?u.push(p):a&&p()),p}function Ch(e,t,n){const o=this.proxy,i=Le(e)?e.includes(".")?Qu(o,e):()=>o[e]:e.bind(o,o);let s;ve(t)?s=t:(s=t.handler,n=t);const r=ii(this),l=Ju(i,s.bind(o),n);return r(),l}function Qu(e,t){const n=t.split(".");return()=>{let o=e;for(let i=0;it==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${yt(t)}Modifiers`]||e[`${Tn(t)}Modifiers`];function Th(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||Pe;let i=n;const s=t.startsWith("update:"),r=s&&Nh(o,t.slice(7));r&&(r.trim&&(i=n.map(c=>Le(c)?c.trim():c)),r.number&&(i=n.map(Ai)));let l,a=o[l=wi(t)]||o[l=wi(yt(t))];!a&&s&&(a=o[l=wi(Tn(t))]),a&&Tt(a,e,6,i);const u=o[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Tt(u,e,6,i)}}function ec(e,t,n=!1){const o=t.emitsCache,i=o.get(e);if(i!==void 0)return i;const s=e.emits;let r={},l=!1;if(!ve(e)){const a=u=>{const c=ec(u,t,!0);c&&(l=!0,je(r,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(ke(e)&&o.set(e,null),null):(ce(s)?s.forEach(a=>r[a]=null):je(r,s),ke(e)&&o.set(e,r),r)}function cs(e,t){return!e||!Qi(t)?!1:(t=t.slice(2).replace(/Once$/,""),$e(e,t[0].toLowerCase()+t.slice(1))||$e(e,Tn(t))||$e(e,t))}function Ml(e){const{type:t,vnode:n,proxy:o,withProxy:i,propsOptions:[s],slots:r,attrs:l,emit:a,render:u,renderCache:c,props:d,data:p,setupState:h,ctx:b,inheritAttrs:E}=e,N=Bi(e);let M,P;try{if(n.shapeFlag&4){const _=i||o,O=_;M=Rt(u.call(O,_,c,d,h,p,b)),P=l}else{const _=t;M=Rt(_.length>1?_(d,{attrs:l,slots:r,emit:a}):_(d,null)),P=t.props?l:Mh(l)}}catch(_){Ao.length=0,ls(_,e,1),M=Me(Gt)}let g=M;if(P&&E!==!1){const _=Object.keys(P),{shapeFlag:O}=g;_.length&&O&7&&(s&&_.some(Ar)&&(P=$h(P,s)),g=Un(g,P,!1,!0))}return n.dirs&&(g=Un(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&Uo(g,n.transition),M=g,Bi(N),M}const Mh=e=>{let t;for(const n in e)(n==="class"||n==="style"||Qi(n))&&((t||(t={}))[n]=e[n]);return t},$h=(e,t)=>{const n={};for(const o in e)(!Ar(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Ih(e,t,n){const{props:o,children:i,component:s}=e,{props:r,children:l,patchFlag:a}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return o?$l(o,r,u):!!r;if(a&8){const c=t.dynamicProps;for(let d=0;de.__isSuspense;function Ph(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):Lf(e)}const _e=Symbol.for("v-fgt"),ds=Symbol.for("v-txt"),Gt=Symbol.for("v-cmt"),Si=Symbol.for("v-stc"),Ao=[];let st=null;function z(e=!1){Ao.push(st=e?null:[])}function Ah(){Ao.pop(),st=Ao[Ao.length-1]||null}let ro=1;function Il(e,t=!1){ro+=e,e<0&&st&&t&&(st.hasOnce=!0)}function nc(e){return e.dynamicChildren=ro>0?st||Qn:null,Ah(),ro>0&&st&&st.push(e),e}function W(e,t,n,o,i,s){return nc(x(e,t,n,o,i,s,!0))}function Re(e,t,n,o,i){return nc(Me(e,t,n,o,i,!0))}function Go(e){return e?e.__v_isVNode===!0:!1}function Jn(e,t){return e.type===t.type&&e.key===t.key}const oc=({key:e})=>e??null,Ci=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||Oe(e)||ve(e)?{i:Ze,r:e,k:t,f:!!n}:e:null);function x(e,t=null,n=null,o=0,i=null,s=e===_e?0:1,r=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&oc(t),ref:t&&Ci(t),scopeId:Cu,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:o,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Ze};return l?(Zr(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=Le(n)?8:16),ro>0&&!r&&st&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&st.push(a),a}const Me=Dh;function Dh(e,t=null,n=null,o=0,i=null,s=!1){if((!e||e===Ru)&&(e=Gt),Go(e)){const l=Un(e,t,!0);return n&&Zr(l,n),ro>0&&!s&&st&&(l.shapeFlag&6?st[st.indexOf(e)]=l:st.push(l)),l.patchFlag=-2,l}if(Uh(e)&&(e=e.__vccOpts),t){t=Oh(t);let{class:l,style:a}=t;l&&!Le(l)&&(t.class=ze(l)),ke(a)&&(Ur(a)&&!ce(a)&&(a=je({},a)),t.style=at(a))}const r=Le(e)?1:tc(e)?128:Ff(e)?64:ke(e)?4:ve(e)?2:0;return x(e,t,n,o,i,r,s,!0)}function Oh(e){return e?Ur(e)||ju(e)?je({},e):e:null}function Un(e,t,n=!1,o=!1){const{props:i,ref:s,patchFlag:r,children:l,transition:a}=e,u=t?Mn(i||{},t):i,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&oc(u),ref:t&&t.ref?n&&s?ce(s)?s.concat(Ci(t)):[s,Ci(t)]:Ci(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Un(e.ssContent),ssFallback:e.ssFallback&&Un(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&o&&Uo(c,a.clone(c)),c}function Be(e=" ",t=0){return Me(ds,null,e,t)}function Wr(e,t){const n=Me(Si,null,e);return n.staticCount=t,n}function Ne(e="",t=!1){return t?(z(),Re(Gt,null,e)):Me(Gt,null,e)}function Rt(e){return e==null||typeof e=="boolean"?Me(Gt):ce(e)?Me(_e,null,e.slice()):Go(e)?wn(e):Me(ds,null,String(e))}function wn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Un(e)}function Zr(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(o&65){const i=t.default;i&&(i._c&&(i._d=!1),Zr(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!ju(t)?t._ctx=Ze:i===3&&Ze&&(Ze.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ve(t)?(t={default:t,_ctx:Ze},n=32):(t=String(t),o&64?(n=16,t=[Be(t)]):n=8);e.children=t,e.shapeFlag|=n}function Mn(...e){const t={};for(let n=0;net||Ze;let Fi,ur;{const e=ns(),t=(n,o)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(o),s=>{i.length>1?i.forEach(r=>r(s)):i[0](s)}};Fi=t("__VUE_INSTANCE_SETTERS__",n=>et=n),ur=t("__VUE_SSR_SETTERS__",n=>jo=n)}const ii=e=>{const t=et;return Fi(e),e.scope.on(),()=>{e.scope.off(),Fi(t)}},kl=()=>{et&&et.scope.off(),Fi(null)};function ic(e){return e.vnode.shapeFlag&4}let jo=!1;function Lh(e,t=!1,n=!1){t&&ur(t);const{props:o,children:i}=e.vnode,s=ic(e);hh(e,o,s,t),mh(e,i,n||t);const r=s?Fh(e,t):void 0;return t&&ur(!1),r}function Fh(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,th);const{setup:o}=n;if(o){dn();const i=e.setupContext=o.length>1?rc(e):null,s=ii(e),r=oi(o,e,0,[e.props,i]),l=Za(r);if(fn(),s(),(l||e.sp)&&!no(e)&&Iu(e),l){if(r.then(kl,kl),t)return r.then(a=>{Pl(e,a)}).catch(a=>{ls(a,e,0)});e.asyncDep=r}else Pl(e,r)}else sc(e)}function Pl(e,t,n){ve(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ke(t)&&(e.setupState=yu(t)),sc(e)}function sc(e,t,n){const o=e.type;e.render||(e.render=o.render||Lt);{const i=ii(e);dn();try{sh(e)}finally{fn(),i()}}}const zh={get(e,t){return Qe(e,"get",""),e[t]}};function rc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,zh),slots:e.slots,emit:e.emit,expose:t}}function fs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(yu(an(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Po)return Po[n](e)},has(t,n){return n in t||n in Po}})):e.proxy}function Hh(e,t=!0){return ve(e)?e.displayName||e.name:e.name||t&&e.__name}function Uh(e){return ve(e)&&"__vccOpts"in e}const pe=(e,t)=>Df(e,t,jo);function Ie(e,t,n){const o=arguments.length;return o===2?ke(t)&&!ce(t)?Go(t)?Me(e,null,[t]):Me(e,t):Me(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&Go(n)&&(n=[n]),Me(e,t,n))}function Gh(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o0&&st&&st.push(e),!0}const jh="3.5.18";/** +* @vue/runtime-dom v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let cr;const Al=typeof window<"u"&&window.trustedTypes;if(Al)try{cr=Al.createPolicy("vue",{createHTML:e=>e})}catch{}const lc=cr?e=>cr.createHTML(e):e=>e,Yh="http://www.w3.org/2000/svg",Kh="http://www.w3.org/1998/Math/MathML",Qt=typeof document<"u"?document:null,Dl=Qt&&Qt.createElement("template"),Xh={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const i=t==="svg"?Qt.createElementNS(Yh,e):t==="mathml"?Qt.createElementNS(Kh,e):n?Qt.createElement(e,{is:n}):Qt.createElement(e);return e==="select"&&o&&o.multiple!=null&&i.setAttribute("multiple",o.multiple),i},createText:e=>Qt.createTextNode(e),createComment:e=>Qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,i,s){const r=n?n.previousSibling:t.lastChild;if(i&&(i===s||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===s||!(i=i.nextSibling)););else{Dl.innerHTML=lc(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const l=Dl.content;if(o==="svg"||o==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},gn="transition",_o="animation",lo=Symbol("_vtc"),ac={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Wh=je({},Gf,ac),kn=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ol=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function Zh(e){const t={};for(const C in e)C in ac||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:o,duration:i,enterFromClass:s=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:u=r,appearToClass:c=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,b=qh(i),E=b&&b[0],N=b&&b[1],{onBeforeEnter:M,onEnter:P,onEnterCancelled:g,onLeave:_,onLeaveCancelled:O,onBeforeAppear:U=M,onAppear:X=P,onAppearCancelled:H=g}=t,F=(C,ee,T,G)=>{C._enterCancelled=G,mn(C,ee?c:l),mn(C,ee?u:r),T&&T()},Z=(C,ee)=>{C._isLeaving=!1,mn(C,d),mn(C,h),mn(C,p),ee&&ee()},j=C=>(ee,T)=>{const G=C?X:P,k=()=>F(ee,C,T);kn(G,[ee,k]),Rl(()=>{mn(ee,C?a:s),At(ee,C?c:l),Ol(G)||Vl(ee,o,E,k)})};return je(t,{onBeforeEnter(C){kn(M,[C]),At(C,s),At(C,r)},onBeforeAppear(C){kn(U,[C]),At(C,a),At(C,u)},onEnter:j(!1),onAppear:j(!0),onLeave(C,ee){C._isLeaving=!0;const T=()=>Z(C,ee);At(C,d),C._enterCancelled?(At(C,p),dr()):(dr(),At(C,p)),Rl(()=>{C._isLeaving&&(mn(C,d),At(C,h),Ol(_)||Vl(C,o,N,T))}),kn(_,[C,T])},onEnterCancelled(C){F(C,!1,void 0,!0),kn(g,[C])},onAppearCancelled(C){F(C,!0,void 0,!0),kn(H,[C])},onLeaveCancelled(C){Z(C),kn(O,[C])}})}function qh(e){if(e==null)return null;if(ke(e))return[Rs(e.enter),Rs(e.leave)];{const t=Rs(e);return[t,t]}}function Rs(e){return Jd(e)}function At(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[lo]||(e[lo]=new Set)).add(t)}function mn(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[lo];n&&(n.delete(t),n.size||(e[lo]=void 0))}function Rl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Jh=0;function Vl(e,t,n,o){const i=e._endId=++Jh,s=()=>{i===e._endId&&o()};if(n!=null)return setTimeout(s,n);const{type:r,timeout:l,propCount:a}=uc(e,t);if(!r)return o();const u=r+"end";let c=0;const d=()=>{e.removeEventListener(u,p),s()},p=h=>{h.target===e&&++c>=a&&d()};setTimeout(()=>{c(n[b]||"").split(", "),i=o(`${gn}Delay`),s=o(`${gn}Duration`),r=Bl(i,s),l=o(`${_o}Delay`),a=o(`${_o}Duration`),u=Bl(l,a);let c=null,d=0,p=0;t===gn?r>0&&(c=gn,d=r,p=s.length):t===_o?u>0&&(c=_o,d=u,p=a.length):(d=Math.max(r,u),c=d>0?r>u?gn:_o:null,p=c?c===gn?s.length:a.length:0);const h=c===gn&&/\b(transform|all)(,|$)/.test(o(`${gn}Property`).toString());return{type:c,timeout:d,propCount:p,hasTransform:h}}function Bl(e,t){for(;e.lengthLl(n)+Ll(e[o])))}function Ll(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function dr(){return document.body.offsetHeight}function Qh(e,t,n){const o=e[lo];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Fl=Symbol("_vod"),ep=Symbol("_vsh"),tp=Symbol(""),np=/(^|;)\s*display\s*:/;function op(e,t,n){const o=e.style,i=Le(n);let s=!1;if(n&&!i){if(t)if(Le(t))for(const r of t.split(";")){const l=r.slice(0,r.indexOf(":")).trim();n[l]==null&&Ni(o,l,"")}else for(const r in t)n[r]==null&&Ni(o,r,"");for(const r in n)r==="display"&&(s=!0),Ni(o,r,n[r])}else if(i){if(t!==n){const r=o[tp];r&&(n+=";"+r),o.cssText=n,s=np.test(n)}}else t&&e.removeAttribute("style");Fl in e&&(e[Fl]=s?o.display:"",e[ep]&&(o.display="none"))}const zl=/\s*!important$/;function Ni(e,t,n){if(ce(n))n.forEach(o=>Ni(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=ip(e,t);zl.test(n)?e.setProperty(Tn(o),n.replace(zl,""),"important"):e[o]=n}}const Hl=["Webkit","Moz","ms"],Vs={};function ip(e,t){const n=Vs[t];if(n)return n;let o=yt(t);if(o!=="filter"&&o in e)return Vs[t]=o;o=ts(o);for(let i=0;iBs||(ap.then(()=>Bs=0),Bs=Date.now());function cp(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;Tt(dp(o,n.value),t,5,[o])};return n.value=e,n.attached=up(),n}function dp(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>i=>!i._stopped&&o&&o(i))}else return t}const Xl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,fp=(e,t,n,o,i,s)=>{const r=i==="svg";t==="class"?Qh(e,o,r):t==="style"?op(e,n,o):Qi(t)?Ar(t)||rp(e,t,n,o,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):hp(e,t,o,r))?(jl(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Gl(e,t,o,r,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Le(o))?jl(e,yt(t),o,s,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Gl(e,t,o,r))};function hp(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&Xl(t)&&ve(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return Xl(t)&&Le(n)?!1:t in e}const cc=new WeakMap,dc=new WeakMap,zi=Symbol("_moveCb"),Wl=Symbol("_enterCb"),pp=e=>(delete e.props.mode,e),gp=pp({name:"TransitionGroup",props:je({},Wh,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Xt(),o=Uf();let i,s;return Du(()=>{if(!i.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!bp(i[0].el,n.vnode.el,r)){i=[];return}i.forEach(mp),i.forEach(yp);const l=i.filter(_p);dr(),l.forEach(a=>{const u=a.el,c=u.style;At(u,r),c.transform=c.webkitTransform=c.transitionDuration="";const d=u[zi]=p=>{p&&p.target!==u||(!p||/transform$/.test(p.propertyName))&&(u.removeEventListener("transitionend",d),u[zi]=null,mn(u,r))};u.addEventListener("transitionend",d)}),i=[]}),()=>{const r=Se(e),l=Zh(r);let a=r.tag||_e;if(i=[],s)for(let u=0;u{l.split(/\s+/).forEach(a=>a&&o.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const s=t.nodeType===1?t:t.parentNode;s.appendChild(o);const{hasTransform:r}=uc(o);return s.removeChild(o),r}const ao=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>xi(t,n):t};function wp(e){e.target.composing=!0}function Zl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const un=Symbol("_assign"),tt={created(e,{modifiers:{lazy:t,trim:n,number:o}},i){e[un]=ao(i);const s=o||i.props&&i.props.type==="number";En(e,t?"change":"input",r=>{if(r.target.composing)return;let l=e.value;n&&(l=l.trim()),s&&(l=Ai(l)),e[un](l)}),n&&En(e,"change",()=>{e.value=e.value.trim()}),t||(En(e,"compositionstart",wp),En(e,"compositionend",Zl),En(e,"change",Zl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:o,trim:i,number:s}},r){if(e[un]=ao(r),e.composing)return;const l=(s||e.type==="number")&&!/^0\d/.test(e.value)?Ai(e.value):e.value,a=t??"";l!==a&&(document.activeElement===e&&e.type!=="range"&&(o&&t===n||i&&e.value.trim()===a)||(e.value=a))}},Ke={deep:!0,created(e,t,n){e[un]=ao(n),En(e,"change",()=>{const o=e._modelValue,i=Yo(e),s=e.checked,r=e[un];if(ce(o)){const l=Rr(o,i),a=l!==-1;if(s&&!a)r(o.concat(i));else if(!s&&a){const u=[...o];u.splice(l,1),r(u)}}else if(po(o)){const l=new Set(o);s?l.add(i):l.delete(i),r(l)}else r(fc(e,s))})},mounted:ql,beforeUpdate(e,t,n){e[un]=ao(n),ql(e,t,n)}};function ql(e,{value:t,oldValue:n},o){e._modelValue=t;let i;if(ce(t))i=Rr(t,o.props.value)>-1;else if(po(t))i=t.has(o.props.value);else{if(t===n)return;i=ni(t,fc(e,!0))}e.checked!==i&&(e.checked=i)}const Ft={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const i=po(t);En(e,"change",()=>{const s=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?Ai(Yo(r)):Yo(r));e[un](e.multiple?i?new Set(s):s:s[0]),e._assigning=!0,ht(()=>{e._assigning=!1})}),e[un]=ao(o)},mounted(e,{value:t}){Jl(e,t)},beforeUpdate(e,t,n){e[un]=ao(n)},updated(e,{value:t}){e._assigning||Jl(e,t)}};function Jl(e,t){const n=e.multiple,o=ce(t);if(!(n&&!o&&!po(t))){for(let i=0,s=e.options.length;iString(u)===String(l)):r.selected=Rr(t,l)>-1}else r.selected=t.has(l);else if(ni(Yo(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Yo(e){return"_value"in e?e._value:e.value}function fc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const xp=["ctrl","shift","alt","meta"],Ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>xp.some(n=>e[`${n}Key`]&&!t.includes(n))},Do=(e,t)=>{const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=(i,...s)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=i=>{if(!("key"in i))return;const s=Tn(i.key);if(t.some(r=>r===s||Sp[r]===s))return e(i)})},Cp=je({patchProp:fp},Xh);let Ql;function Np(){return Ql||(Ql=_h(Cp))}const hc=(...e)=>{const t=Np().createApp(...e),{mount:n}=t;return t.mount=o=>{const i=Mp(o);if(!i)return;const s=t._component;!ve(s)&&!s.render&&!s.template&&(s.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,Tp(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t};function Tp(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Mp(e){return Le(e)?document.querySelector(e):e}/*! + * pinia v3.0.3 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let pc;const hs=e=>pc=e,gc=Symbol();function hr(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Oo;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Oo||(Oo={}));function $p(){const e=os(!0),t=e.run(()=>te({}));let n=[],o=[];const i=an({install(s){hs(i),i._a=s,s.provide(gc,i),s.config.globalProperties.$pinia=i,o.forEach(r=>n.push(r)),o=[]},use(s){return this._a?n.push(s):o.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}const vc=()=>{};function ea(e,t,n,o=vc){e.push(t);const i=()=>{const s=e.indexOf(t);s>-1&&(e.splice(s,1),o())};return!n&&is()&&To(i),i}function Wn(e,...t){e.slice().forEach(n=>{n(...t)})}const Ip=e=>e(),ta=Symbol(),Ls=Symbol();function pr(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],i=e[n];hr(i)&&hr(o)&&e.hasOwnProperty(n)&&!Oe(o)&&!ln(o)?e[n]=pr(i,o):e[n]=o}return e}const kp=Symbol();function Pp(e){return!hr(e)||!Object.prototype.hasOwnProperty.call(e,kp)}const{assign:yn}=Object;function Ap(e){return!!(Oe(e)&&e.effect)}function Dp(e,t,n,o){const{state:i,actions:s,getters:r}=t,l=n.state.value[e];let a;function u(){l||(n.state.value[e]=i?i():{});const c=_u(n.state.value[e]);return yn(c,s,Object.keys(r||{}).reduce((d,p)=>(d[p]=an(pe(()=>{hs(n);const h=n._s.get(e);return r[p].call(h,h)})),d),{}))}return a=mc(e,u,t,n,o,!0),a}function mc(e,t,n={},o,i,s){let r;const l=yn({actions:{}},n),a={deep:!0};let u,c,d=[],p=[],h;const b=o.state.value[e];!s&&!b&&(o.state.value[e]={}),te({});let E;function N(H){let F;u=c=!1,typeof H=="function"?(H(o.state.value[e]),F={type:Oo.patchFunction,storeId:e,events:h}):(pr(o.state.value[e],H),F={type:Oo.patchObject,payload:H,storeId:e,events:h});const Z=E=Symbol();ht().then(()=>{E===Z&&(u=!0)}),c=!0,Wn(d,F,o.state.value[e])}const M=s?function(){const{state:F}=n,Z=F?F():{};this.$patch(j=>{yn(j,Z)})}:vc;function P(){r.stop(),d=[],p=[],o._s.delete(e)}const g=(H,F="")=>{if(ta in H)return H[Ls]=F,H;const Z=function(){hs(o);const j=Array.from(arguments),C=[],ee=[];function T(L){C.push(L)}function G(L){ee.push(L)}Wn(p,{args:j,name:Z[Ls],store:O,after:T,onError:G});let k;try{k=H.apply(this&&this.$id===e?this:O,j)}catch(L){throw Wn(ee,L),L}return k instanceof Promise?k.then(L=>(Wn(C,L),L)).catch(L=>(Wn(ee,L),Promise.reject(L))):(Wn(C,k),k)};return Z[ta]=!0,Z[Ls]=F,Z},_={_p:o,$id:e,$onAction:ea.bind(null,p),$patch:N,$reset:M,$subscribe(H,F={}){const Z=ea(d,H,F.detached,()=>j()),j=r.run(()=>xe(()=>o.state.value[e],C=>{(F.flush==="sync"?c:u)&&H({storeId:e,type:Oo.direct,events:h},C)},yn({},a,F)));return Z},$dispose:P},O=go(_);o._s.set(e,O);const X=(o._a&&o._a.runWithContext||Ip)(()=>o._e.run(()=>(r=os()).run(()=>t({action:g}))));for(const H in X){const F=X[H];if(Oe(F)&&!Ap(F)||ln(F))s||(b&&Pp(F)&&(Oe(F)?F.value=b[H]:pr(F,b[H])),o.state.value[e][H]=F);else if(typeof F=="function"){const Z=g(F,H);X[H]=Z,l.actions[H]=F}}return yn(O,X),yn(Se(O),X),Object.defineProperty(O,"$state",{get:()=>o.state.value[e],set:H=>{N(F=>{yn(F,H)})}}),o._p.forEach(H=>{yn(O,r.run(()=>H({store:O,app:o._a,pinia:o,options:l})))}),b&&s&&n.hydrate&&n.hydrate(O.$state,b),u=!0,c=!0,O}/*! #__NO_SIDE_EFFECTS__ */function yc(e,t,n){let o;const i=typeof t=="function";o=i?n:t;function s(r,l){const a=fh();return r=r||(a?mt(gc,null):null),r&&hs(r),r=pc,r._s.has(e)||(i?mc(e,t,o,r):Dp(e,o,r)),r._s.get(e)}return s.$id=e,s}function Op(e){const t=Se(e),n={};for(const o in t){const i=t[o];i.effect?n[o]=pe({get:()=>e[o],set(s){e[o]=s}}):(Oe(i)||ln(i))&&(n[o]=Ve(e,o))}return n}var Rp=Object.defineProperty,na=Object.getOwnPropertySymbols,Vp=Object.prototype.hasOwnProperty,Bp=Object.prototype.propertyIsEnumerable,oa=(e,t,n)=>t in e?Rp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_c=(e,t)=>{for(var n in t||(t={}))Vp.call(t,n)&&oa(e,n,t[n]);if(na)for(var n of na(t))Bp.call(t,n)&&oa(e,n,t[n]);return e},ps=e=>typeof e=="function",gs=e=>typeof e=="string",bc=e=>gs(e)&&e.trim().length>0,Lp=e=>typeof e=="number",On=e=>typeof e>"u",Ko=e=>typeof e=="object"&&e!==null,Fp=e=>zt(e,"tag")&&bc(e.tag),wc=e=>window.TouchEvent&&e instanceof TouchEvent,xc=e=>zt(e,"component")&&Ec(e.component),zp=e=>ps(e)||Ko(e),Ec=e=>!On(e)&&(gs(e)||zp(e)||xc(e)),ia=e=>Ko(e)&&["height","width","right","left","top","bottom"].every(t=>Lp(e[t])),zt=(e,t)=>(Ko(e)||ps(e))&&t in e,Hp=(e=>()=>e++)(0);function Fs(e){return wc(e)?e.targetTouches[0].clientX:e.clientX}function sa(e){return wc(e)?e.targetTouches[0].clientY:e.clientY}var Up=e=>{On(e.remove)?e.parentNode&&e.parentNode.removeChild(e):e.remove()},si=e=>xc(e)?si(e.component):Fp(e)?he({render(){return e}}):typeof e=="string"?e:Se(oe(e)),Gp=e=>{if(typeof e=="string")return e;const t=zt(e,"props")&&Ko(e.props)?e.props:{},n=zt(e,"listeners")&&Ko(e.listeners)?e.listeners:{};return{component:si(e),props:t,listeners:n}},jp=()=>typeof window<"u",qr=class{constructor(){this.allHandlers={}}getHandlers(e){return this.allHandlers[e]||[]}on(e,t){const n=this.getHandlers(e);n.push(t),this.allHandlers[e]=n}off(e,t){const n=this.getHandlers(e);n.splice(n.indexOf(t)>>>0,1)}emit(e,t){this.getHandlers(e).forEach(o=>o(t))}},Yp=e=>["on","off","emit"].every(t=>zt(e,t)&&ps(e[t])),dt;(function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.DEFAULT="default"})(dt||(dt={}));var Xo;(function(e){e.TOP_LEFT="top-left",e.TOP_CENTER="top-center",e.TOP_RIGHT="top-right",e.BOTTOM_LEFT="bottom-left",e.BOTTOM_CENTER="bottom-center",e.BOTTOM_RIGHT="bottom-right"})(Xo||(Xo={}));var ft;(function(e){e.ADD="add",e.DISMISS="dismiss",e.UPDATE="update",e.CLEAR="clear",e.UPDATE_DEFAULTS="update_defaults"})(ft||(ft={}));var Et="Vue-Toastification",bt={type:{type:String,default:dt.DEFAULT},classNames:{type:[String,Array],default:()=>[]},trueBoolean:{type:Boolean,default:!0}},Sc={type:bt.type,customIcon:{type:[String,Boolean,Object,Function],default:!0}},Ti={component:{type:[String,Object,Function,Boolean],default:"button"},classNames:bt.classNames,showOnHover:{type:Boolean,default:!1},ariaLabel:{type:String,default:"close"}},gr={timeout:{type:[Number,Boolean],default:5e3},hideProgressBar:{type:Boolean,default:!1},isRunning:{type:Boolean,default:!1}},Cc={transition:{type:[Object,String],default:`${Et}__bounce`}},Kp={position:{type:String,default:Xo.TOP_RIGHT},draggable:bt.trueBoolean,draggablePercent:{type:Number,default:.6},pauseOnFocusLoss:bt.trueBoolean,pauseOnHover:bt.trueBoolean,closeOnClick:bt.trueBoolean,timeout:gr.timeout,hideProgressBar:gr.hideProgressBar,toastClassName:bt.classNames,bodyClassName:bt.classNames,icon:Sc.customIcon,closeButton:Ti.component,closeButtonClassName:Ti.classNames,showCloseButtonOnHover:Ti.showOnHover,accessibility:{type:Object,default:()=>({toastRole:"alert",closeButtonLabel:"close"})},rtl:{type:Boolean,default:!1},eventBus:{type:Object,required:!1,default:()=>new qr}},Xp={id:{type:[String,Number],required:!0,default:0},type:bt.type,content:{type:[String,Object,Function],required:!0,default:""},onClick:{type:Function,default:void 0},onClose:{type:Function,default:void 0}},Wp={container:{type:[Object,Function],default:()=>document.body},newestOnTop:bt.trueBoolean,maxToasts:{type:Number,default:20},transition:Cc.transition,toastDefaults:Object,filterBeforeCreate:{type:Function,default:e=>e},filterToasts:{type:Function,default:e=>e},containerClassName:bt.classNames,onMounted:Function,shareAppContext:[Boolean,Object]},cn={CORE_TOAST:Kp,TOAST:Xp,CONTAINER:Wp,PROGRESS_BAR:gr,ICON:Sc,TRANSITION:Cc,CLOSE_BUTTON:Ti},Nc=he({name:"VtProgressBar",props:cn.PROGRESS_BAR,data(){return{hasClass:!0}},computed:{style(){return{animationDuration:`${this.timeout}ms`,animationPlayState:this.isRunning?"running":"paused",opacity:this.hideProgressBar?0:1}},cpClass(){return this.hasClass?`${Et}__progress-bar`:""}},watch:{timeout(){this.hasClass=!1,this.$nextTick(()=>this.hasClass=!0)}},mounted(){this.$el.addEventListener("animationend",this.animationEnded)},beforeUnmount(){this.$el.removeEventListener("animationend",this.animationEnded)},methods:{animationEnded(){this.$emit("close-toast")}}});function Zp(e,t){return z(),W("div",{style:at(e.style),class:ze(e.cpClass)},null,6)}Nc.render=Zp;var qp=Nc,Tc=he({name:"VtCloseButton",props:cn.CLOSE_BUTTON,computed:{buttonComponent(){return this.component!==!1?si(this.component):"button"},classes(){const e=[`${Et}__close-button`];return this.showOnHover&&e.push("show-on-hover"),e.concat(this.classNames)}}}),Jp=Be(" × ");function Qp(e,t){return z(),Re(vo(e.buttonComponent),Mn({"aria-label":e.ariaLabel,class:e.classes},e.$attrs),{default:Ut(()=>[Jp]),_:1},16,["aria-label","class"])}Tc.render=Qp;var eg=Tc,Mc={},tg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"check-circle",class:"svg-inline--fa fa-check-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},ng=x("path",{fill:"currentColor",d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},null,-1),og=[ng];function ig(e,t){return z(),W("svg",tg,og)}Mc.render=ig;var sg=Mc,$c={},rg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"info-circle",class:"svg-inline--fa fa-info-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},lg=x("path",{fill:"currentColor",d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},null,-1),ag=[lg];function ug(e,t){return z(),W("svg",rg,ag)}$c.render=ug;var ra=$c,Ic={},cg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-circle",class:"svg-inline--fa fa-exclamation-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},dg=x("path",{fill:"currentColor",d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),fg=[dg];function hg(e,t){return z(),W("svg",cg,fg)}Ic.render=hg;var pg=Ic,kc={},gg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-triangle",class:"svg-inline--fa fa-exclamation-triangle fa-w-18",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},vg=x("path",{fill:"currentColor",d:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),mg=[vg];function yg(e,t){return z(),W("svg",gg,mg)}kc.render=yg;var _g=kc,Pc=he({name:"VtIcon",props:cn.ICON,computed:{customIconChildren(){return zt(this.customIcon,"iconChildren")?this.trimValue(this.customIcon.iconChildren):""},customIconClass(){return gs(this.customIcon)?this.trimValue(this.customIcon):zt(this.customIcon,"iconClass")?this.trimValue(this.customIcon.iconClass):""},customIconTag(){return zt(this.customIcon,"iconTag")?this.trimValue(this.customIcon.iconTag,"i"):"i"},hasCustomIcon(){return this.customIconClass.length>0},component(){return this.hasCustomIcon?this.customIconTag:Ec(this.customIcon)?si(this.customIcon):this.iconTypeComponent},iconTypeComponent(){return{[dt.DEFAULT]:ra,[dt.INFO]:ra,[dt.SUCCESS]:sg,[dt.ERROR]:_g,[dt.WARNING]:pg}[this.type]},iconClasses(){const e=[`${Et}__icon`];return this.hasCustomIcon?e.concat(this.customIconClass):e}},methods:{trimValue(e,t=""){return bc(e)?e.trim():t}}});function bg(e,t){return z(),Re(vo(e.component),{class:ze(e.iconClasses)},{default:Ut(()=>[Be(Ae(e.customIconChildren),1)]),_:1},8,["class"])}Pc.render=bg;var wg=Pc,Ac=he({name:"VtToast",components:{ProgressBar:qp,CloseButton:eg,Icon:wg},inheritAttrs:!1,props:Object.assign({},cn.CORE_TOAST,cn.TOAST),data(){return{isRunning:!0,disableTransitions:!1,beingDragged:!1,dragStart:0,dragPos:{x:0,y:0},dragRect:{}}},computed:{classes(){const e=[`${Et}__toast`,`${Et}__toast--${this.type}`,`${this.position}`].concat(this.toastClassName);return this.disableTransitions&&e.push("disable-transition"),this.rtl&&e.push(`${Et}__toast--rtl`),e},bodyClasses(){return[`${Et}__toast-${gs(this.content)?"body":"component-body"}`].concat(this.bodyClassName)},draggableStyle(){return this.dragStart===this.dragPos.x?{}:this.beingDragged?{transform:`translateX(${this.dragDelta}px)`,opacity:1-Math.abs(this.dragDelta/this.removalDistance)}:{transition:"transform 0.2s, opacity 0.2s",transform:"translateX(0)",opacity:1}},dragDelta(){return this.beingDragged?this.dragPos.x-this.dragStart:0},removalDistance(){return ia(this.dragRect)?(this.dragRect.right-this.dragRect.left)*this.draggablePercent:0}},mounted(){this.draggable&&this.draggableSetup(),this.pauseOnFocusLoss&&this.focusSetup()},beforeUnmount(){this.draggable&&this.draggableCleanup(),this.pauseOnFocusLoss&&this.focusCleanup()},methods:{hasProp:zt,getVueComponentFromObj:si,closeToast(){this.eventBus.emit(ft.DISMISS,this.id)},clickHandler(){this.onClick&&this.onClick(this.closeToast),this.closeOnClick&&(!this.beingDragged||this.dragStart===this.dragPos.x)&&this.closeToast()},timeoutHandler(){this.closeToast()},hoverPause(){this.pauseOnHover&&(this.isRunning=!1)},hoverPlay(){this.pauseOnHover&&(this.isRunning=!0)},focusPause(){this.isRunning=!1},focusPlay(){this.isRunning=!0},focusSetup(){addEventListener("blur",this.focusPause),addEventListener("focus",this.focusPlay)},focusCleanup(){removeEventListener("blur",this.focusPause),removeEventListener("focus",this.focusPlay)},draggableSetup(){const e=this.$el;e.addEventListener("touchstart",this.onDragStart,{passive:!0}),e.addEventListener("mousedown",this.onDragStart),addEventListener("touchmove",this.onDragMove,{passive:!1}),addEventListener("mousemove",this.onDragMove),addEventListener("touchend",this.onDragEnd),addEventListener("mouseup",this.onDragEnd)},draggableCleanup(){const e=this.$el;e.removeEventListener("touchstart",this.onDragStart),e.removeEventListener("mousedown",this.onDragStart),removeEventListener("touchmove",this.onDragMove),removeEventListener("mousemove",this.onDragMove),removeEventListener("touchend",this.onDragEnd),removeEventListener("mouseup",this.onDragEnd)},onDragStart(e){this.beingDragged=!0,this.dragPos={x:Fs(e),y:sa(e)},this.dragStart=Fs(e),this.dragRect=this.$el.getBoundingClientRect()},onDragMove(e){this.beingDragged&&(e.preventDefault(),this.isRunning&&(this.isRunning=!1),this.dragPos={x:Fs(e),y:sa(e)})},onDragEnd(){this.beingDragged&&(Math.abs(this.dragDelta)>=this.removalDistance?(this.disableTransitions=!0,this.$nextTick(()=>this.closeToast())):setTimeout(()=>{this.beingDragged=!1,ia(this.dragRect)&&this.pauseOnHover&&this.dragRect.bottom>=this.dragPos.y&&this.dragPos.y>=this.dragRect.top&&this.dragRect.left<=this.dragPos.x&&this.dragPos.x<=this.dragRect.right?this.isRunning=!1:this.isRunning=!0}))}}}),xg=["role"];function Eg(e,t){const n=Bn("Icon"),o=Bn("CloseButton"),i=Bn("ProgressBar");return z(),W("div",{class:ze(e.classes),style:at(e.draggableStyle),onClick:t[0]||(t[0]=(...s)=>e.clickHandler&&e.clickHandler(...s)),onMouseenter:t[1]||(t[1]=(...s)=>e.hoverPause&&e.hoverPause(...s)),onMouseleave:t[2]||(t[2]=(...s)=>e.hoverPlay&&e.hoverPlay(...s))},[e.icon?(z(),Re(n,{key:0,"custom-icon":e.icon,type:e.type},null,8,["custom-icon","type"])):Ne("v-if",!0),x("div",{role:e.accessibility.toastRole||"alert",class:ze(e.bodyClasses)},[typeof e.content=="string"?(z(),W(_e,{key:0},[Be(Ae(e.content),1)],2112)):(z(),Re(vo(e.getVueComponentFromObj(e.content)),Mn({key:1,"toast-id":e.id},e.hasProp(e.content,"props")?e.content.props:{},eh(e.hasProp(e.content,"listeners")?e.content.listeners:{}),{onCloseToast:e.closeToast}),null,16,["toast-id","onCloseToast"]))],10,xg),e.closeButton?(z(),Re(o,{key:1,component:e.closeButton,"class-names":e.closeButtonClassName,"show-on-hover":e.showCloseButtonOnHover,"aria-label":e.accessibility.closeButtonLabel,onClick:Do(e.closeToast,["stop"])},null,8,["component","class-names","show-on-hover","aria-label","onClick"])):Ne("v-if",!0),e.timeout?(z(),Re(i,{key:2,"is-running":e.isRunning,"hide-progress-bar":e.hideProgressBar,timeout:e.timeout,onCloseToast:e.timeoutHandler},null,8,["is-running","hide-progress-bar","timeout","onCloseToast"])):Ne("v-if",!0)],38)}Ac.render=Eg;var Sg=Ac,Dc=he({name:"VtTransition",props:cn.TRANSITION,emits:["leave"],methods:{hasProp:zt,leave(e){e instanceof HTMLElement&&(e.style.left=e.offsetLeft+"px",e.style.top=e.offsetTop+"px",e.style.width=getComputedStyle(e).width,e.style.position="absolute")}}});function Cg(e,t){return z(),Re(vp,{tag:"div","enter-active-class":e.transition.enter?e.transition.enter:`${e.transition}-enter-active`,"move-class":e.transition.move?e.transition.move:`${e.transition}-move`,"leave-active-class":e.transition.leave?e.transition.leave:`${e.transition}-leave-active`,onLeave:e.leave},{default:Ut(()=>[Ct(e.$slots,"default")]),_:3},8,["enter-active-class","move-class","leave-active-class","onLeave"])}Dc.render=Cg;var Ng=Dc,Oc=he({name:"VueToastification",devtools:{hide:!0},components:{Toast:Sg,VtTransition:Ng},props:Object.assign({},cn.CORE_TOAST,cn.CONTAINER,cn.TRANSITION),data(){return{count:0,positions:Object.values(Xo),toasts:{},defaults:{}}},computed:{toastArray(){return Object.values(this.toasts)},filteredToasts(){return this.defaults.filterToasts(this.toastArray)}},beforeMount(){const e=this.eventBus;e.on(ft.ADD,this.addToast),e.on(ft.CLEAR,this.clearToasts),e.on(ft.DISMISS,this.dismissToast),e.on(ft.UPDATE,this.updateToast),e.on(ft.UPDATE_DEFAULTS,this.updateDefaults),this.defaults=this.$props},mounted(){this.setup(this.container)},methods:{async setup(e){ps(e)&&(e=await e()),Up(this.$el),e.appendChild(this.$el)},setToast(e){On(e.id)||(this.toasts[e.id]=e)},addToast(e){e.content=Gp(e.content);const t=Object.assign({},this.defaults,e.type&&this.defaults.toastDefaults&&this.defaults.toastDefaults[e.type],e),n=this.defaults.filterBeforeCreate(t,this.toastArray);n&&this.setToast(n)},dismissToast(e){const t=this.toasts[e];!On(t)&&!On(t.onClose)&&t.onClose(),delete this.toasts[e]},clearToasts(){Object.keys(this.toasts).forEach(e=>{this.dismissToast(e)})},getPositionToasts(e){const t=this.filteredToasts.filter(n=>n.position===e).slice(0,this.defaults.maxToasts);return this.defaults.newestOnTop?t.reverse():t},updateDefaults(e){On(e.container)||this.setup(e.container),this.defaults=Object.assign({},this.defaults,e)},updateToast({id:e,options:t,create:n}){this.toasts[e]?(t.timeout&&t.timeout===this.toasts[e].timeout&&t.timeout++,this.setToast(Object.assign({},this.toasts[e],t))):n&&this.addToast(Object.assign({},{id:e},t))},getClasses(e){return[`${Et}__container`,e].concat(this.defaults.containerClassName)}}});function Tg(e,t){const n=Bn("Toast"),o=Bn("VtTransition");return z(),W("div",null,[(z(!0),W(_e,null,Ye(e.positions,i=>(z(),W("div",{key:i},[Me(o,{transition:e.defaults.transition,class:ze(e.getClasses(i))},{default:Ut(()=>[(z(!0),W(_e,null,Ye(e.getPositionToasts(i),s=>(z(),Re(n,Mn({key:s.id},s),null,16))),128))]),_:2},1032,["transition","class"])]))),128))])}Oc.render=Tg;var Mg=Oc,la=(e={},t=!0)=>{const n=e.eventBus=e.eventBus||new qr;t&&ht(()=>{const s=hc(Mg,_c({},e)),r=s.mount(document.createElement("div")),l=e.onMounted;if(On(l)||l(r,s),e.shareAppContext){const a=e.shareAppContext;a===!0?console.warn(`[${Et}] App to share context with was not provided.`):(s._context.components=a._context.components,s._context.directives=a._context.directives,s._context.mixins=a._context.mixins,s._context.provides=a._context.provides,s.config.globalProperties=a.config.globalProperties)}});const o=(s,r)=>{const l=Object.assign({},{id:Hp(),type:dt.DEFAULT},r,{content:s});return n.emit(ft.ADD,l),l.id};o.clear=()=>n.emit(ft.CLEAR,void 0),o.updateDefaults=s=>{n.emit(ft.UPDATE_DEFAULTS,s)},o.dismiss=s=>{n.emit(ft.DISMISS,s)};function i(s,{content:r,options:l},a=!1){const u=Object.assign({},l,{content:r});n.emit(ft.UPDATE,{id:s,options:u,create:a})}return o.update=i,o.success=(s,r)=>o(s,Object.assign({},r,{type:dt.SUCCESS})),o.info=(s,r)=>o(s,Object.assign({},r,{type:dt.INFO})),o.error=(s,r)=>o(s,Object.assign({},r,{type:dt.ERROR})),o.warning=(s,r)=>o(s,Object.assign({},r,{type:dt.WARNING})),o},$g=()=>{const e=()=>console.warn(`[${Et}] This plugin does not support SSR!`);return new Proxy(e,{get(){return e}})};function Rc(e){return jp()?Yp(e)?la({eventBus:e},!1):la(e,!0):$g()}var Vc=Symbol("VueToastification"),Bc=new qr,Ig=(e,t)=>{t?.shareAppContext===!0&&(t.shareAppContext=e);const n=Rc(_c({eventBus:Bc},t));e.provide(Vc,n)},kg=e=>{const t=Xt()?mt(Vc,void 0):void 0;return t||Rc(Bc)},Pg=Ig;const Ag={class:"StepWizard"},Dg={class:"step-indicators"},Og=["onClick"],Rg={class:"step-content"},Vg={class:"step-actions"},Bg=he({__name:"StepWizard",props:{steps:{type:Array,required:!0}},setup(e){const t=e,n=te(0),o=()=>{n.value{s>=0&&s(z(),W("div",Ag,[x("div",Dg,[(z(!0),W(_e,null,Ye(e.steps,(l,a)=>(z(),W("div",{key:a,class:ze(["step",{active:n.value===a,completed:n.value>a}]),onClick:u=>i(a)},null,10,Og))),128))]),x("div",Rg,[(z(),Re(vo(e.steps[n.value])))]),x("div",Vg,[n.value>0?(z(),W("button",{key:0,onClick:r[0]||(r[0]=l=>n.value--),class:"btn prev-btn"},"Previous")):Ne("",!0),n.value{const n=e.__vccOpts||e;for(const[o,i]of t)n[o]=i;return n},Lg=Xe(Bg,[["__scopeId","data-v-9f8c12c9"]]),_t=yc("projectSpec",()=>{const e=te({project_name:"asd",database:"",models:[],custom_enums:[]}),t=te(!1),n=te([{name:"UserRole",values:[{name:"ADMIN",value:"ADMIN"},{name:"USER",value:"auto()"}]}]),o=te([{id:"user",data:{fields:[{name:"id",type:"UUID",isPrimaryKey:!0,defaultValue:"uuid.uuid4"},{name:"name",type:"String"},{name:"email",type:"String"},{name:"role",type:"Enum",typeEnum:"UserRole",defaultValue:"ADMIN"},{name:"created_at",type:"DateTime"},{name:"updated_at",type:"DateTime"}],relations:[{fieldName:"post_id",targetModel:"post",onDelete:"CASCADE",isNullable:!1,isUnique:!1,isIndex:!1}]},type:"custom",position:{x:50,y:50}},{id:"post",data:{fields:[{name:"id",type:"UUID",isPrimaryKey:!0,defaultValue:"uuid.uuid4"},{name:"created_at",type:"DateTime"},{name:"updated_at",type:"DateTime"}],relations:[]},type:"custom",position:{x:150,y:355}}]),i=te([{id:"(user)-(post)-(post_id)",source:"user",target:"post",type:"smoothstep"}]),s=()=>{const $=o.value.map(V=>{const Y=V.id,J=V.data.fields.map(Q=>({name:Q.name,type:Q.type,type_enum:Q.typeEnum??null,primary_key:Q.isPrimaryKey??!1,nullable:Q.isNullable??!1,unique:Q.isUnique??!1,index:Q.isIndex??!1,default_value:Q.defaultValue??null,extra_kwargs:null,metadata:{is_created_at_timestamp:Q.name==="created_at",is_updated_at_timestamp:Q.name==="updated_at",is_foreign_key:!1}})),ue=V.data.relations.map(Q=>({field_name:Q.fieldName,target_model:Q.targetModel,back_populates:null,on_delete:Q.onDelete??"CASCADE",nullable:Q.isNullable??!1,unique:Q.isUnique??!1,index:Q.isIndex??!1}));return{name:Y,fields:J,relationships:ue,metadata:{create_endpoints:!0,create_tests:!0,create_daos:!0,create_dtos:!0,is_auth_model:!1}}}),D=n.value.map(V=>({name:V.name,values:V.values.map(Y=>({name:Y.name,value:Y.value}))}));return{project_name:e.value.project_name,use_postgres:!0,use_alembic:!0,models:$,custom_enums:D}},r=async()=>{const $=s();try{const D=await fetch("http://localhost:8000/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($)});if(!D.ok){const Y=await D.text();throw new Error(`Error ${D.status}: ${Y}`)}const V=await D.json();return console.log("Generation successful:",V),V}catch(D){throw console.error("Generation failed:",D),D}},l=$=>o.value.find(D=>D.id===$),a=$=>{l($)||o.value.push({id:$,data:{fields:[],relations:[]},type:"custom",position:{x:100,y:100}})},u=$=>{l($)&&(o.value=o.value.filter(V=>V.id!==$),i.value=i.value.filter(V=>V.source!==$&&V.target!==$),o.value.forEach(V=>{V.data.relations&&(V.data.relations=V.data.relations?.filter(Y=>Y.targetModel!==$))}))},c=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);if(l(D))throw new Error(`Duplicate name: ${D}`);V.id=D,i.value.forEach(J=>{J.source===$&&(J.source=D),J.target===$&&(J.target=D),J.id=J.id.replace(`(${$})`,`(${D})`)}),o.value.forEach(J=>{J.data.relations.forEach(ue=>{ue.targetModel===$&&(ue.targetModel=D)})})},d=($,D)=>{const V=$.data.fields.find(J=>J.name===D),Y=$.data.relations.find(J=>J.fieldName===D);return!!V||!!Y},p=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);if(d(V,D.name))throw new Error(`Field name already exists for model: ${$}`);V.data.fields.push(D)},h=($,D,V)=>{const Y=l($);if(!Y)throw new Error(`Model does not exist: ${$}`);const J=Y.data.fields.findIndex(ue=>ue.name===D);if(J===-1)throw new Error(`Field does not exist: ${D}`);Y.data.fields[J]=V,console.log(V)},b=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);V.data.fields=V.data.fields.filter(Y=>Y.name!==D)},E=($,D,V)=>{const Y=l($);Y&&(_($,D,V.fieldName),Y.data.relations.push(V))},N=($,D,V)=>{const Y=l($);Y&&(Y.data.relations=Y.data.relations.filter(J=>J.fieldName!==V),O($,D,V))},M=($,D,V,Y)=>{const J=l($);if(!J||!J.data.relations)return;const ue=J.data.relations.findIndex(me=>me.fieldName===V);J.data.relations[ue]=Y;const Q=g($,D,V),ie=P(Q);if(!ie)return;const le=g($,Y.targetModel,Y.fieldName);ie.id=le,ie.source=$,ie.target=Y.targetModel},P=$=>i.value.find(D=>D.id===$),g=($,D,V)=>`(${$})-(${D})-(${V})`,_=($,D,V)=>{$!==D&&i.value.push({id:g($,D,V),source:$,target:D,type:"smoothstep"})},O=($,D,V)=>{i.value=i.value.filter(Y=>Y.id!==g($,D,V))},U=$=>{const D=n.value.find(V=>V.name===$);if(!D)throw Error(`Enum not found: ${$}`);return D},X=($,D)=>{const Y=U($).values.find(J=>J.name===D);if(!Y)throw Error(`EnumValue not found: ${D}`);return Y};return{nodes:o,edges:i,enums:n,createNode:a,createEdge:_,deleteNode:u,renameNode:c,addField:p,deleteField:b,updateField:h,addRelation:E,deleteRelation:N,updateRelation:M,projectSpec:e,isProjectNameConfirmed:t,setProjectName:$=>{e.value.project_name=$},getProjectName:()=>e.value.project_name,setDatabase:$=>{e.value.database=$},getDatabase:()=>e.value.database,findNodeById:l,findEnumByName:U,addEnum:$=>{const D={name:$,values:[]};return n.value.push(D),D},updateEnumName:($,D)=>{const V=U($);V.name=D,o.value.forEach(Y=>{Y.data.fields.forEach(J=>{J.type==="Enum"&&J.typeEnum===$&&(J.typeEnum=D)})})},deleteEnum:$=>{n.value=n.value.filter(D=>D.name!==$),o.value.forEach(D=>{D.data.fields=D.data.fields.filter(V=>V.typeEnum!==$)})},addEnumValue:($,D)=>{U($).values.push(D)},updateEnumValue:($,D,V)=>{const Y=X($,D);Y.name=V.name,Y.value=V.value,console.log($),console.log(V),o.value.forEach(J=>{J.data.fields.forEach(ue=>{ue.type==="Enum"&&ue.typeEnum===$&&(ue.defaultValue=V.name)})})},deleteEnumValue:($,D)=>{const V=U($);V.values=V.values.filter(Y=>Y.name!==D)},convertNodesToModel:s,callGenerateEndpoint:r}}),jt={boundedStr:/^.{1,100}$/,snakeCase:/^[a-z][a-z0-9_]*$/,pascalCase:/^[A-Z][a-z]*$/,variableStr:/^[a-zA-Z_][a-zA-Z0-9_-]*$/},Fg=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),Lc=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),aa=e=>jt.boundedStr.test(e)&&jt.pascalCase.test(e),Fc=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),vs=e=>jt.boundedStr.test(e)&&jt.snakeCase.test(e),Yt={modelName:"Use 1-100 characters. Start with a letter or underscore. Example: userModel_1",enumName:"Use PascalCase (start with uppercase). Example: UserStatus",enumValueName:"Use 1-100 characters. Start with a letter or underscore. Example: active_status",fieldName:"Use lowercase snake_case. Example: user_name"},zg={class:"container"},Hg={class:"input-group"},Ug={class:"input-horizontal"},Gg=["value","disabled"],jg=["disabled"],Yg={key:0,class:"error-message"},Kg=he({__name:"ProjectNameStep",setup(e){const t=_t(),n=te("asd"),o=te(!1),i=te(""),s=l=>{if(n.value=l.target.value,n.value.length===0){o.value=!1;return}Fg(n.value)?o.value=!1:(o.value=!0,i.value="Name must start with a letter/underscore and only contain letters, numbers, -, or _")},r=()=>{if(t.isProjectNameConfirmed){t.isProjectNameConfirmed=!1,t.setProjectName("");return}!n.value||o.value||(t.setProjectName(n.value),t.isProjectNameConfirmed=!0)};return ut(()=>{t.getProjectName()&&(n.value=t.getProjectName())}),(l,a)=>(z(),W("main",zg,[a[2]||(a[2]=x("h1",null,"Choose a Project Name",-1)),a[3]||(a[3]=x("br",null,null,-1)),x("div",Hg,[a[1]||(a[1]=x("div",{class:"label-group"},[x("label",{class:"project-name-label",for:"project-name"},"Project Name")],-1)),x("div",Ug,[x("input",{class:ze(["project-name",{confirmed:oe(t).isProjectNameConfirmed,"input-error":o.value}]),type:"text",placeholder:"Enter your project name",value:n.value,onInput:a[0]||(a[0]=u=>s(u)),disabled:oe(t).isProjectNameConfirmed,maxlength:"100"},null,42,Gg),x("button",{class:ze(["confirm-btn",{confirmed:oe(t).isProjectNameConfirmed}]),onClick:r,disabled:o.value||!n.value}," Confirm ",10,jg)]),o.value?(z(),W("div",Yg,Ae(i.value),1)):Ne("",!0)])]))}}),Xg=Xe(Kg,[["__scopeId","data-v-cad93208"]]),Wg={class:"container"},Zg={class:"db-grid-container"},qg={class:"db-grid"},Jg=["onClick"],Qg=he({__name:"DatabaseStep",setup(e){const t=_t(),n=["PostgreSQL","MySQL","SQLite"],o=i=>{i==="PostgreSQL"&&t.setDatabase(t.getDatabase()===i?"":i)};return ut(()=>{t.getDatabase()&&t.getDatabase()!=="PostgreSQL"&&t.setDatabase("")}),(i,s)=>(z(),W("main",Wg,[s[0]||(s[0]=x("h1",null,"Choose a Database",-1)),s[1]||(s[1]=x("br",null,null,-1)),x("div",Zg,[x("div",qg,[(z(),W(_e,null,Ye(n,r=>x("div",{class:ze(["db-item",{confirmed:oe(t).getDatabase()===r,disabled:r!=="PostgreSQL",enabled:r==="PostgreSQL"}]),key:r,onClick:l=>o(r)},[x("span",null,Ae(r),1)],10,Jg)),64))])])]))}}),ev=Xe(Qg,[["__scopeId","data-v-9256ee53"]]),tv={class:"custom-node"},nv={class:"custom-node-header"},ov={class:"custom-node-title"},iv={key:0,class:"dropdown-list"},sv={class:"custom-node-body nodrag"},rv=["onClick"],lv={class:"custom-node-field-name"},av={key:0,class:"custom-node-field-type"},uv={key:1,class:"custom-node-field-type"},cv=["onClick"],dv={class:"custom-node-field-name"},fv={class:"custom-node-field-type"},hv=he({__name:"CustomNode",props:{id:{},data:{}},setup(e){const t=e,n=te(!1),o=()=>{n.value=!0},i=()=>{n.value=!1};return(s,r)=>(z(),W("div",tv,[x("div",nv,[x("div",ov,Ae(s.id),1),x("div",{class:"custom-node-actions nodrag",onMouseover:o,onMouseleave:i},[r[4]||(r[4]=x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-ellipsis"},[x("circle",{cx:"12",cy:"12",r:"1"}),x("circle",{cx:"19",cy:"12",r:"1"}),x("circle",{cx:"5",cy:"12",r:"1"})],-1)),n.value?(z(),W("div",iv,[x("div",{class:"dropdown-item",onClick:r[0]||(r[0]=l=>s.$emit("add-field",t.id))},"Add Field"),x("div",{class:"dropdown-item",onClick:r[1]||(r[1]=l=>s.$emit("add-relation",t.id))},"Add Relation"),x("div",{class:"dropdown-item",onClick:r[2]||(r[2]=l=>s.$emit("rename-node",t.id))},"Rename"),x("div",{class:"dropdown-item",onClick:r[3]||(r[3]=l=>s.$emit("delete-node",t.id))},"Delete")])):Ne("",!0)],32)]),x("div",sv,[(z(!0),W(_e,null,Ye(s.data.fields,l=>(z(),W("div",{key:l.name,class:"custom-node-field-row",onClick:a=>s.$emit("open-edit-field-modal",t.id,l)},[x("div",lv,Ae(l.name),1),l.type!=="Enum"?(z(),W("div",av,Ae(l.type),1)):(z(),W("div",uv,Ae(l.type)+"("+Ae(l.typeEnum)+")",1))],8,rv))),128)),(z(!0),W(_e,null,Ye(s.data.relations,l=>(z(),W("div",{key:l.fieldName,class:"custom-node-field-row",onClick:a=>s.$emit("open-edit-relation-modal",t.id,l)},[x("div",dv,Ae(l.fieldName),1),x("div",fv,Ae(l.targetModel),1)],8,cv))),128))])]))}}),pv=Xe(hv,[["__scopeId","data-v-b7467be7"]]),Wt=yc("modal",()=>{const e=te(!1),t=te(""),n=zo(null),o=te({});function i(r,l,a={}){n.value=an(l),o.value=a,t.value=r,e.value=!0}function s(){e.value=!1,n.value=null,o.value={},t.value=""}return{isOpen:e,modalTitle:t,currentComponent:n,props:o,open:i,close:s}}),gv=kg(),Kt=e=>{gv.error(e,{toastClassName:"container-class"})},vv={class:"field-modal-container"},mv={class:"input-container"},yv={class:"input-group"},_v={class:"input-group"},bv=["disabled"],wv={key:0,class:"input-group"},xv=["value"],Ev={class:"input-group"},Sv=["disabled"],Cv=["value"],Nv=["disabled"],Tv={class:"checkbox-group"},Mv={key:0,class:"checkbox-group"},$v=he({__name:"AddFieldModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(),s=te(""),r=te(""),l=te(""),a=te(!1),u=te(!1),c=te(!1),d=te(!1),p=te(null),h=te({}),b=te(!1),E=te(!1);xe(a,P=>{P&&(r.value="UUID",l.value="uuid.uuid4")});const N=()=>{l.value==="datetime.now(timezone.utc)"&&(l.value=""),h.value={}};xe(b,P=>{P?(E.value=!1,l.value="datetime.now(timezone.utc)",h.value={}):E.value||N()}),xe(E,P=>{P?(b.value=!1,l.value="datetime.now(timezone.utc)",h.value={onupdate:"datetime.now(timezone.utc)"}):b.value||N()}),xe(r,P=>{P!=="DateTime"&&(b.value||E.value)&&(N(),b.value=!1,E.value=!1)});const M=()=>{if(!(!s.value||!r.value)){if(!vs(s.value)){Kt(Yt.fieldName);return}n.addField(t.id,{name:s.value,type:r.value,typeEnum:i.value?.name,isPrimaryKey:a.value,isNullable:u.value,isUnique:c.value,isIndex:d.value,defaultValue:l.value||void 0,metadata:p.value||void 0}),o.close()}};return(P,g)=>(z(),W("main",vv,[x("div",mv,[x("div",yv,[g[11]||(g[11]=x("label",{class:"field-label"},"Field name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":g[0]||(g[0]=_=>s.value=_),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",_v,[g[13]||(g[13]=x("label",{class:"field-label"},"Type",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[1]||(g[1]=_=>r.value=_),disabled:a.value},g[12]||(g[12]=[Wr('-- Select type --StringIntUUIDDateTimeBooleanFloatEnum',8)]),8,bv),[[Ft,r.value]])]),r.value==="Enum"?(z(),W("div",wv,[g[15]||(g[15]=x("label",{class:"field-label"},"Select Enum",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[2]||(g[2]=_=>i.value=_)},[g[14]||(g[14]=x("option",{disabled:"",value:""},"-- Select Enum --",-1)),(z(!0),W(_e,null,Ye(oe(n).enums,_=>(z(),W("option",{key:_.name,value:_},Ae(_.name),9,xv))),128))],512),[[Ft,i.value]])])):Ne("",!0),x("div",Ev,[g[17]||(g[17]=x("label",{class:"field-label"},"Default value",-1)),r.value==="Enum"?ye((z(),W("select",{key:0,class:"field-select","onUpdate:modelValue":g[3]||(g[3]=_=>l.value=_),disabled:a.value},[g[16]||(g[16]=x("option",{value:""},null,-1)),(z(!0),W(_e,null,Ye(i.value?.values,_=>(z(),W("option",{key:_.name,value:_.name},Ae(_.name),9,Cv))),128))],8,Sv)),[[Ft,l.value]]):ye((z(),W("input",{key:1,class:"field-input","onUpdate:modelValue":g[4]||(g[4]=_=>l.value=_),type:"text",maxlength:"100",disabled:a.value||b.value||E.value},null,8,Nv)),[[tt,l.value]])])]),x("div",Tv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[5]||(g[5]=_=>a.value=_)},null,512),[[Ke,a.value]]),g[18]||(g[18]=Be(" Primary key",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[6]||(g[6]=_=>u.value=_)},null,512),[[Ke,u.value]]),g[19]||(g[19]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[7]||(g[7]=_=>c.value=_)},null,512),[[Ke,c.value]]),g[20]||(g[20]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[8]||(g[8]=_=>d.value=_)},null,512),[[Ke,d.value]]),g[21]||(g[21]=Be(" Index",-1))])]),r.value==="DateTime"?(z(),W("div",Mv,[g[24]||(g[24]=x("label",{class:"field-label"},"Timestamp",-1)),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[9]||(g[9]=_=>b.value=_)},null,512),[[Ke,b.value]]),g[22]||(g[22]=Be(" Created",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[10]||(g[10]=_=>E.value=_)},null,512),[[Ke,E.value]]),g[23]||(g[23]=Be(" Updated",-1))])])):Ne("",!0),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:M},"Save")])]))}}),Iv=Xe($v,[["__scopeId","data-v-957caa91"]]),kv={class:"field-modal-container"},Pv={class:"input-container"},Av={class:"input-group"},Dv={class:"input-group"},Ov=["disabled"],Rv={key:0,class:"input-group"},Vv=["value"],Bv={class:"input-group"},Lv=["disabled"],Fv=["value"],zv=["disabled"],Hv={class:"checkbox-group"},Uv={key:0,class:"checkbox-group"},Gv=he({__name:"EditFieldModal",props:{id:{},field:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(),s=te(t.field.name),r=te(t.field.type),l=te(t.field.defaultValue||""),a=te(t.field.isPrimaryKey||!1),u=te(t.field.isNullable||!1),c=te(t.field.isUnique||!1),d=te(t.field.isIndex||!1),p=te(t.field.extraKwargs||{}),h=te(t.field.metadata?.isCreatedAtTimestamp||!1),b=te(t.field.metadata?.isUpdatedAtTimestamp||!1);ut(()=>{t.field.type==="Enum"&&t.field.typeEnum&&(i.value=n.findEnumByName(t.field.typeEnum)),t.field.type==="DateTime"&&console.log(h.value)}),xe(a,P=>{P&&(r.value="UUID",l.value="uuid.uuid4")});const E=()=>{l.value="",p.value={}};xe(h,P=>{P?(b.value=!1,l.value="datetime.now(timezone.utc)",p.value={}):b.value||E()}),xe(b,P=>{P?(h.value=!1,l.value="datetime.now(timezone.utc)",p.value={onupdate:"datetime.now(timezone.utc)"}):h.value||E()}),xe(r,P=>{console.log(r.value,P),P!=="DateTime"&&(h.value||b.value)&&(E(),h.value=!1,b.value=!1)});const N=()=>{if(!vs(s.value)){Kt(Yt.fieldName);return}n.updateField(t.id,t.field.name,{name:s.value,type:r.value,typeEnum:i.value?.name,defaultValue:l.value||void 0,isPrimaryKey:a.value,isNullable:u.value,isUnique:c.value,isIndex:d.value,metadata:{isCreatedAtTimestamp:h.value,isUpdatedAtTimestamp:b.value},extraKwargs:Object.keys(p.value).length?p.value:void 0}),o.close()},M=()=>{n.deleteField(t.id,t.field.name),o.close()};return(P,g)=>(z(),W("main",kv,[x("div",Pv,[x("div",Av,[g[11]||(g[11]=x("label",{class:"field-label"},"Field name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":g[0]||(g[0]=_=>s.value=_),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",Dv,[g[13]||(g[13]=x("label",{class:"field-label"},"Type",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[1]||(g[1]=_=>r.value=_),disabled:a.value},g[12]||(g[12]=[Wr('-- Select type --StringIntUUIDDateTimeBooleanFloatEnum',8)]),8,Ov),[[Ft,r.value]])]),r.value==="Enum"?(z(),W("div",Rv,[g[15]||(g[15]=x("label",{class:"field-label"},"Select Enum",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[2]||(g[2]=_=>i.value=_)},[g[14]||(g[14]=x("option",{disabled:"",value:""},"-- Select Enum --",-1)),(z(!0),W(_e,null,Ye(oe(n).enums,_=>(z(),W("option",{key:_.name,value:_},Ae(_.name),9,Vv))),128))],512),[[Ft,i.value]])])):Ne("",!0),x("div",Bv,[g[17]||(g[17]=x("label",{class:"field-label"},"Default value",-1)),r.value==="Enum"?ye((z(),W("select",{key:0,class:"field-select","onUpdate:modelValue":g[3]||(g[3]=_=>l.value=_),disabled:a.value},[g[16]||(g[16]=x("option",{value:""},null,-1)),(z(!0),W(_e,null,Ye(i.value?.values,_=>(z(),W("option",{key:_.name,value:_.name},Ae(_.name),9,Fv))),128))],8,Lv)),[[Ft,l.value]]):ye((z(),W("input",{key:1,class:"field-input","onUpdate:modelValue":g[4]||(g[4]=_=>l.value=_),type:"text",maxlength:"100",disabled:a.value||h.value||b.value},null,8,zv)),[[tt,l.value]])])]),x("div",Hv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[5]||(g[5]=_=>a.value=_)},null,512),[[Ke,a.value]]),g[18]||(g[18]=Be(" Primary key",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[6]||(g[6]=_=>u.value=_)},null,512),[[Ke,u.value]]),g[19]||(g[19]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[7]||(g[7]=_=>c.value=_)},null,512),[[Ke,c.value]]),g[20]||(g[20]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[8]||(g[8]=_=>d.value=_)},null,512),[[Ke,d.value]]),g[21]||(g[21]=Be(" Index",-1))])]),r.value==="DateTime"?(z(),W("div",Uv,[g[24]||(g[24]=x("label",{class:"field-label"},"Timestamp",-1)),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[9]||(g[9]=_=>h.value=_)},null,512),[[Ke,h.value]]),g[22]||(g[22]=Be(" Created",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[10]||(g[10]=_=>b.value=_)},null,512),[[Ke,b.value]]),g[23]||(g[23]=Be(" Updated",-1))])])):Ne("",!0),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:N},"Save"),x("button",{class:"delete-field-btn",onClick:M},"Delete")])]))}}),jv=Xe(Gv,[["__scopeId","data-v-d1c2c65c"]]),Yv={class:"relation-container"},Kv={class:"input-container"},Xv={class:"input-group"},Wv={class:"input-group"},Zv=["value"],qv={class:"input-group"},Jv={class:"input-group"},Qv={class:"checkbox-group"},em=he({__name:"EditRelationModal",props:{id:{},relation:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te(""),r=te(""),l=te(""),a=te(""),u=te(!1),c=te(!1),d=te(!1);ut(()=>{i.value=t.relation.fieldName||"",s.value=t.relation.fieldName||"",r.value=t.relation.targetModel||"",l.value=t.relation.onDelete||"",a.value=t.relation.backPopulates||"",u.value=t.relation.isNullable||!1,c.value=t.relation.isUnique||!1,d.value=t.relation.isIndex||!1});const p=pe(()=>n.nodes.filter(E=>E.id!==t.id)),h=()=>{if(!(!r.value||!s.value)){if(!vs(s.value)){Kt(Yt.fieldName);return}n.updateRelation(t.id,t.relation.targetModel,t.relation.fieldName,{fieldName:s.value,targetModel:r.value,backPopulates:a.value,onDelete:l.value,isNullable:u.value,isUnique:c.value,isIndex:d.value}),o.close()}},b=()=>{n.deleteRelation(t.id,t.relation.targetModel,t.relation.fieldName),o.close()};return(E,N)=>(z(),W("main",Yv,[x("div",Kv,[x("div",Xv,[N[7]||(N[7]=x("label",{class:"relation-label"},"Field name",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":N[0]||(N[0]=M=>s.value=M),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",Wv,[N[9]||(N[9]=x("label",{class:"relation-label"},"Target model",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":N[1]||(N[1]=M=>r.value=M)},[N[8]||(N[8]=x("option",{disabled:"",value:""},"-- Select a model --",-1)),(z(!0),W(_e,null,Ye(p.value,M=>(z(),W("option",{key:M.id,value:M.id},Ae(M.id),9,Zv))),128))],512),[[Ft,r.value]])]),x("div",qv,[N[11]||(N[11]=x("label",{class:"relation-label"},"OnDelete",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":N[2]||(N[2]=M=>l.value=M)},N[10]||(N[10]=[x("option",{disabled:"",value:""},"-- Select behavior --",-1),x("option",{value:"CASCADE"},"CASCADE",-1),x("option",{value:"SET_NULL"},"SET_NULL",-1)]),512),[[Ft,l.value]])]),x("div",Jv,[N[12]||(N[12]=x("label",{class:"relation-label"},"Back populates",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":N[3]||(N[3]=M=>a.value=M),type:"text"},null,512),[[tt,a.value]])])]),x("div",Qv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[4]||(N[4]=M=>u.value=M)},null,512),[[Ke,u.value]]),N[13]||(N[13]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[5]||(N[5]=M=>c.value=M)},null,512),[[Ke,c.value]]),N[14]||(N[14]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[6]||(N[6]=M=>d.value=M)},null,512),[[Ke,d.value]]),N[15]||(N[15]=Be(" Index",-1))])]),x("div",{class:"action-group"},[x("button",{class:"delete-relation-btn",onClick:b},"Delete"),x("button",{class:"save-relation-btn",onClick:h},"Save")])]))}}),tm=Xe(em,[["__scopeId","data-v-de485ddf"]]),nm={class:"relation-container"},om={class:"input-container"},im={class:"input-group"},sm={class:"input-group"},rm=["value"],lm={class:"input-group"},am={class:"input-group"},um={class:"checkbox-group"},cm=he({__name:"AddRelationModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te(""),r=te(""),l=te(""),a=te(!1),u=te(!1),c=te(!1),d=pe(()=>n.nodes.filter(h=>h.id!==t.id)),p=()=>{if(!(!s.value||!i.value)){if(!vs(i.value)){Kt(Yt.fieldName);return}n.addRelation(t.id,s.value,{fieldName:i.value,targetModel:s.value,backPopulates:l.value,onDelete:r.value,isNullable:a.value,isUnique:u.value,isIndex:c.value}),o.close()}};return(h,b)=>(z(),W("main",nm,[x("div",om,[x("div",im,[b[7]||(b[7]=x("label",{class:"relation-label"},"Field name",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":b[0]||(b[0]=E=>i.value=E),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",sm,[b[9]||(b[9]=x("label",{class:"relation-label"},"Target model",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":b[1]||(b[1]=E=>s.value=E)},[b[8]||(b[8]=x("option",{disabled:"",value:""},"-- Select a model --",-1)),(z(!0),W(_e,null,Ye(d.value,E=>(z(),W("option",{key:E.id,value:E.id},Ae(E.id),9,rm))),128))],512),[[Ft,s.value]])]),x("div",lm,[b[11]||(b[11]=x("label",{class:"relation-label"},"OnDelete",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":b[2]||(b[2]=E=>r.value=E)},b[10]||(b[10]=[x("option",{disabled:"",value:""},"-- Select behavior --",-1),x("option",{value:"CASCADE"},"CASCADE",-1),x("option",{value:"SET_NULL"},"SET_NULL",-1)]),512),[[Ft,r.value]])]),x("div",am,[b[12]||(b[12]=x("label",{class:"relation-label"},"Back populates",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":b[3]||(b[3]=E=>l.value=E),type:"text",maxlength:"100"},null,512),[[tt,l.value]])])]),x("div",um,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[4]||(b[4]=E=>a.value=E)},null,512),[[Ke,a.value]]),b[13]||(b[13]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[5]||(b[5]=E=>u.value=E)},null,512),[[Ke,u.value]]),b[14]||(b[14]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[6]||(b[6]=E=>c.value=E)},null,512),[[Ke,c.value]]),b[15]||(b[15]=Be(" Index",-1))])]),x("div",{class:"action-group"},[x("button",{class:"save-relation-btn",onClick:p},"Save")])]))}}),dm=Xe(cm,[["__scopeId","data-v-074cc5ca"]]),fm={class:"rename-node-modal"},hm={class:"input-container"},pm={class:"input-group"},gm=he({__name:"RenameNodeModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(t.id),s=()=>{const r=i.value.trim();if(!Lc(r)){Kt(Yt.modelName);return}if(!r||i.value===t.id){o.close();return}n.renameNode(t.id,r),o.close()};return(r,l)=>(z(),W("main",fm,[x("div",hm,[x("div",pm,[l[1]||(l[1]=x("label",{class:"field-label"},"New model name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":l[0]||(l[0]=a=>i.value=a),type:"text",maxlength:"100"},null,512),[[tt,i.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-btn",onClick:s},"Rename")])]))}}),vm=Xe(gm,[["__scopeId","data-v-7350b5ff"]]);function ms(e){return is()?(To(e),!0):!1}function nn(e){return typeof e=="function"?e():oe(e)}const mm=typeof window<"u"&&typeof document<"u",ym=e=>typeof e<"u",_m=Object.prototype.toString,bm=e=>_m.call(e)==="[object Object]",wm=()=>{};function xm(e,t){function n(...o){return new Promise((i,s)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(i).catch(s)})}return n}const zc=e=>e();function Em(e=zc){const t=te(!0);function n(){t.value=!1}function o(){t.value=!0}const i=(...s)=>{t.value&&e(...s)};return{isActive:zr(t),pause:n,resume:o,eventFilter:i}}function ua(e,t=!1,n="Timeout"){return new Promise((o,i)=>{setTimeout(t?()=>i(n):o,e)})}function Sm(e,t,n={}){const{eventFilter:o=zc,...i}=n;return xe(e,xm(o,t),i)}function Zn(e,t,n={}){const{eventFilter:o,...i}=n,{eventFilter:s,pause:r,resume:l,isActive:a}=Em(o);return{stop:Sm(e,t,{...i,eventFilter:s}),pause:r,resume:l,isActive:a}}function Cm(e,t={}){if(!Oe(e))return _u(e);const n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(const o in e.value)n[o]=If(()=>({get(){return e.value[o]},set(i){var s;if((s=nn(t.replaceRef))!=null?s:!0)if(Array.isArray(e.value)){const l=[...e.value];l[o]=i,e.value=l}else{const l={...e.value,[o]:i};Object.setPrototypeOf(l,Object.getPrototypeOf(e.value)),e.value=l}else e.value[o]=i}}));return n}function vr(e,t=!1){function n(d,{flush:p="sync",deep:h=!1,timeout:b,throwOnTimeout:E}={}){let N=null;const P=[new Promise(g=>{N=xe(e,_=>{d(_)!==t&&(N?.(),g(_))},{flush:p,deep:h,immediate:!0})})];return b!=null&&P.push(ua(b,E).then(()=>nn(e)).finally(()=>N?.())),Promise.race(P)}function o(d,p){if(!Oe(d))return n(_=>_===d,p);const{flush:h="sync",deep:b=!1,timeout:E,throwOnTimeout:N}=p??{};let M=null;const g=[new Promise(_=>{M=xe([e,d],([O,U])=>{t!==(O===U)&&(M?.(),_(O))},{flush:h,deep:b,immediate:!0})})];return E!=null&&g.push(ua(E,N).then(()=>nn(e)).finally(()=>(M?.(),nn(e)))),Promise.race(g)}function i(d){return n(p=>!!p,d)}function s(d){return o(null,d)}function r(d){return o(void 0,d)}function l(d){return n(Number.isNaN,d)}function a(d,p){return n(h=>{const b=Array.from(h);return b.includes(d)||b.includes(nn(d))},p)}function u(d){return c(1,d)}function c(d=1,p){let h=-1;return n(()=>(h+=1,h>=d),p)}return Array.isArray(nn(e))?{toMatch:n,toContains:a,changed:u,changedTimes:c,get not(){return vr(e,!t)}}:{toMatch:n,toBe:o,toBeTruthy:i,toBeNull:s,toBeNaN:l,toBeUndefined:r,changed:u,changedTimes:c,get not(){return vr(e,!t)}}}function mr(e){return vr(e)}function Nm(e){var t;const n=nn(e);return(t=n?.$el)!=null?t:n}const Hc=mm?window:void 0;function Uc(...e){let t,n,o,i;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,o,i]=e,t=Hc):[t,n,o,i]=e,!t)return wm;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const s=[],r=()=>{s.forEach(c=>c()),s.length=0},l=(c,d,p,h)=>(c.addEventListener(d,p,h),()=>c.removeEventListener(d,p,h)),a=xe(()=>[Nm(t),nn(i)],([c,d])=>{if(r(),!c)return;const p=bm(d)?{...d}:d;s.push(...n.flatMap(h=>o.map(b=>l(c,h,b,p))))},{immediate:!0,flush:"post"}),u=()=>{a(),r()};return ms(u),u}function Tm(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function ca(...e){let t,n,o={};e.length===3?(t=e[0],n=e[1],o=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],o=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:i=Hc,eventName:s="keydown",passive:r=!1,dedupe:l=!1}=o,a=Tm(t);return Uc(i,s,c=>{c.repeat&&nn(l)||a(c)&&n(c)},r)}function Mm(e){return JSON.parse(JSON.stringify(e))}function zs(e,t,n,o={}){var i,s,r;const{clone:l=!1,passive:a=!1,eventName:u,deep:c=!1,defaultValue:d,shouldEmit:p}=o,h=Xt(),b=n||h?.emit||((i=h?.$emit)==null?void 0:i.bind(h))||((r=(s=h?.proxy)==null?void 0:s.$emit)==null?void 0:r.bind(h?.proxy));let E=u;t||(t="modelValue"),E=E||`update:${t.toString()}`;const N=g=>l?typeof l=="function"?l(g):Mm(g):g,M=()=>ym(e[t])?N(e[t]):d,P=g=>{p?p(g)&&b(E,g):b(E,g)};if(a){const g=M(),_=te(g);let O=!1;return xe(()=>e[t],U=>{O||(O=!0,_.value=N(U),ht(()=>O=!1))}),xe(_,U=>{!O&&(U!==e[t]||c)&&P(U)},{deep:c}),_}else return pe({get(){return M()},set(g){P(g)}})}var $m={value:()=>{}};function ys(){for(var e=0,t=arguments.length,n={},o;e=0&&(o=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:o}})}Mi.prototype=ys.prototype={constructor:Mi,on:function(e,t){var n=this._,o=Im(e+"",n),i,s=-1,r=o.length;if(arguments.length<2){for(;++s0)for(var n=new Array(i),o=0,i,s;o=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),fa.hasOwnProperty(t)?{space:fa[t],local:e}:e}function Pm(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===yr&&t.documentElement.namespaceURI===yr?t.createElement(e):t.createElementNS(n,e)}}function Am(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Gc(e){var t=_s(e);return(t.local?Am:Pm)(t)}function Dm(){}function Jr(e){return e==null?Dm:function(){return this.querySelector(e)}}function Om(e){typeof e!="function"&&(e=Jr(e));for(var t=this._groups,n=t.length,o=new Array(n),i=0;i=g&&(g=P+1);!(O=N[g])&&++g=0;)(r=o[i])&&(s&&r.compareDocumentPosition(s)^4&&s.parentNode.insertBefore(r,s),s=r);return this}function r1(e){e||(e=l1);function t(d,p){return d&&p?e(d.__data__,p.__data__):!d-!p}for(var n=this._groups,o=n.length,i=new Array(o),s=0;st?1:e>=t?0:NaN}function a1(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function u1(){return Array.from(this)}function c1(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?w1:typeof t=="function"?E1:x1)(e,t,n??"")):uo(this.node(),e)}function uo(e,t){return e.style.getPropertyValue(t)||Wc(e).getComputedStyle(e,null).getPropertyValue(t)}function C1(e){return function(){delete this[e]}}function N1(e,t){return function(){this[e]=t}}function T1(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function M1(e,t){return arguments.length>1?this.each((t==null?C1:typeof t=="function"?T1:N1)(e,t)):this.node()[e]}function Zc(e){return e.trim().split(/^|\s+/)}function Qr(e){return e.classList||new qc(e)}function qc(e){this._node=e,this._names=Zc(e.getAttribute("class")||"")}qc.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function Jc(e,t){for(var n=Qr(e),o=-1,i=t.length;++o=0&&(n=t.slice(o+1),t=t.slice(0,o)),{type:t,name:n}})}function n0(e){return function(){var t=this.__on;if(t){for(var n=0,o=-1,i=t.length,s;n()=>e;function _r(e,{sourceEvent:t,subject:n,target:o,identifier:i,active:s,x:r,y:l,dx:a,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:o,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:s,enumerable:!0,configurable:!0},x:{value:r,enumerable:!0,configurable:!0},y:{value:l,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}_r.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function f0(e){return!e.ctrlKey&&!e.button}function h0(){return this.parentNode}function p0(e,t){return t??{x:e.x,y:e.y}}function g0(){return navigator.maxTouchPoints||"ontouchstart"in this}function v0(){var e=f0,t=h0,n=p0,o=g0,i={},s=ys("start","drag","end"),r=0,l,a,u,c,d=0;function p(_){_.on("mousedown.drag",h).filter(o).on("touchstart.drag",N).on("touchmove.drag",M,d0).on("touchend.drag touchcancel.drag",P).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(_,O){if(!(c||!e.call(this,_,O))){var U=g(this,t.call(this,_,O),_,O,"mouse");U&&(wt(_.view).on("mousemove.drag",b,Wo).on("mouseup.drag",E,Wo),nd(_.view),Hs(_),u=!1,l=_.clientX,a=_.clientY,U("start",_))}}function b(_){if(oo(_),!u){var O=_.clientX-l,U=_.clientY-a;u=O*O+U*U>d}i.mouse("drag",_)}function E(_){wt(_.view).on("mousemove.drag mouseup.drag",null),od(_.view,u),oo(_),i.mouse("end",_)}function N(_,O){if(e.call(this,_,O)){var U=_.changedTouches,X=t.call(this,_,O),H=U.length,F,Z;for(F=0;F>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?pi(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?pi(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=y0.exec(e))?new lt(t[1],t[2],t[3],1):(t=_0.exec(e))?new lt(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=b0.exec(e))?pi(t[1],t[2],t[3],t[4]):(t=w0.exec(e))?pi(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=x0.exec(e))?_a(t[1],t[2]/100,t[3]/100,1):(t=E0.exec(e))?_a(t[1],t[2]/100,t[3]/100,t[4]):ha.hasOwnProperty(e)?va(ha[e]):e==="transparent"?new lt(NaN,NaN,NaN,0):null}function va(e){return new lt(e>>16&255,e>>8&255,e&255,1)}function pi(e,t,n,o){return o<=0&&(e=t=n=NaN),new lt(e,t,n,o)}function N0(e){return e instanceof li||(e=Gn(e)),e?(e=e.rgb(),new lt(e.r,e.g,e.b,e.opacity)):new lt}function br(e,t,n,o){return arguments.length===1?N0(e):new lt(e,t,n,o??1)}function lt(e,t,n,o){this.r=+e,this.g=+t,this.b=+n,this.opacity=+o}el(lt,br,id(li,{brighter(e){return e=e==null?Ui:Math.pow(Ui,e),new lt(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Zo:Math.pow(Zo,e),new lt(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new lt(Fn(this.r),Fn(this.g),Fn(this.b),Gi(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ma,formatHex:ma,formatHex8:T0,formatRgb:ya,toString:ya}));function ma(){return`#${Rn(this.r)}${Rn(this.g)}${Rn(this.b)}`}function T0(){return`#${Rn(this.r)}${Rn(this.g)}${Rn(this.b)}${Rn((isNaN(this.opacity)?1:this.opacity)*255)}`}function ya(){const e=Gi(this.opacity);return`${e===1?"rgb(":"rgba("}${Fn(this.r)}, ${Fn(this.g)}, ${Fn(this.b)}${e===1?")":`, ${e})`}`}function Gi(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Fn(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Rn(e){return e=Fn(e),(e<16?"0":"")+e.toString(16)}function _a(e,t,n,o){return o<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new xt(e,t,n,o)}function sd(e){if(e instanceof xt)return new xt(e.h,e.s,e.l,e.opacity);if(e instanceof li||(e=Gn(e)),!e)return new xt;if(e instanceof xt)return e;e=e.rgb();var t=e.r/255,n=e.g/255,o=e.b/255,i=Math.min(t,n,o),s=Math.max(t,n,o),r=NaN,l=s-i,a=(s+i)/2;return l?(t===s?r=(n-o)/l+(n0&&a<1?0:r,new xt(r,l,a,e.opacity)}function M0(e,t,n,o){return arguments.length===1?sd(e):new xt(e,t,n,o??1)}function xt(e,t,n,o){this.h=+e,this.s=+t,this.l=+n,this.opacity=+o}el(xt,M0,id(li,{brighter(e){return e=e==null?Ui:Math.pow(Ui,e),new xt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Zo:Math.pow(Zo,e),new xt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,o=n+(n<.5?n:1-n)*t,i=2*n-o;return new lt(Us(e>=240?e-240:e+120,i,o),Us(e,i,o),Us(e<120?e+240:e-120,i,o),this.opacity)},clamp(){return new xt(ba(this.h),gi(this.s),gi(this.l),Gi(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Gi(this.opacity);return`${e===1?"hsl(":"hsla("}${ba(this.h)}, ${gi(this.s)*100}%, ${gi(this.l)*100}%${e===1?")":`, ${e})`}`}}));function ba(e){return e=(e||0)%360,e<0?e+360:e}function gi(e){return Math.max(0,Math.min(1,e||0))}function Us(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const tl=e=>()=>e;function $0(e,t){return function(n){return e+n*t}}function I0(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(o){return Math.pow(e+o*t,n)}}function k0(e){return(e=+e)==1?rd:function(t,n){return n-t?I0(t,n,e):tl(isNaN(t)?n:t)}}function rd(e,t){var n=t-e;return n?$0(e,n):tl(isNaN(e)?t:e)}const ji=function e(t){var n=k0(t);function o(i,s){var r=n((i=br(i)).r,(s=br(s)).r),l=n(i.g,s.g),a=n(i.b,s.b),u=rd(i.opacity,s.opacity);return function(c){return i.r=r(c),i.g=l(c),i.b=a(c),i.opacity=u(c),i+""}}return o.gamma=e,o}(1);function P0(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,o=t.slice(),i;return function(s){for(i=0;in&&(s=t.slice(n,s),l[r]?l[r]+=s:l[++r]=s),(o=o[0])===(i=i[0])?l[r]?l[r]+=i:l[++r]=i:(l[++r]=null,a.push({i:r,x:Vt(o,i)})),n=Gs.lastIndex;return n180?c+=360:c-u>180&&(u+=360),p.push({i:d.push(i(d)+"rotate(",null,o)-2,x:Vt(u,c)})):c&&d.push(i(d)+"rotate("+c+o)}function l(u,c,d,p){u!==c?p.push({i:d.push(i(d)+"skewX(",null,o)-2,x:Vt(u,c)}):c&&d.push(i(d)+"skewX("+c+o)}function a(u,c,d,p,h,b){if(u!==d||c!==p){var E=h.push(i(h)+"scale(",null,",",null,")");b.push({i:E-4,x:Vt(u,d)},{i:E-2,x:Vt(c,p)})}else(d!==1||p!==1)&&h.push(i(h)+"scale("+d+","+p+")")}return function(u,c){var d=[],p=[];return u=e(u),c=e(c),s(u.translateX,u.translateY,c.translateX,c.translateY,d,p),r(u.rotate,c.rotate,d,p),l(u.skewX,c.skewX,d,p),a(u.scaleX,u.scaleY,c.scaleX,c.scaleY,d,p),u=c=null,function(h){for(var b=-1,E=p.length,N;++b=0&&e._call.call(void 0,t),e=e._next;--co}function Ea(){jn=(Ki=Jo.now())+bs,co=Eo=0;try{K0()}finally{co=0,W0(),jn=0}}function X0(){var e=Jo.now(),t=e-Ki;t>cd&&(bs-=t,Ki=e)}function W0(){for(var e,t=Yi,n,o=1/0;t;)t._call?(o>t._time&&(o=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Yi=n);So=e,Er(o)}function Er(e){if(!co){Eo&&(Eo=clearTimeout(Eo));var t=e-jn;t>24?(e<1/0&&(Eo=setTimeout(Ea,e-Jo.now()-bs)),bo&&(bo=clearInterval(bo))):(bo||(Ki=Jo.now(),bo=setInterval(X0,cd)),co=1,dd(Ea))}}function Sa(e,t,n){var o=new Xi;return t=t==null?0:+t,o.restart(i=>{o.stop(),e(i+t)},t,n),o}var Z0=ys("start","end","cancel","interrupt"),q0=[],hd=0,Ca=1,Sr=2,Ii=3,Na=4,Cr=5,ki=6;function ws(e,t,n,o,i,s){var r=e.__transition;if(!r)e.__transition={};else if(n in r)return;J0(e,n,{name:t,index:o,group:i,on:Z0,tween:q0,time:s.time,delay:s.delay,duration:s.duration,ease:s.ease,timer:null,state:hd})}function ol(e,t){var n=Mt(e,t);if(n.state>hd)throw new Error("too late; already scheduled");return n}function Zt(e,t){var n=Mt(e,t);if(n.state>Ii)throw new Error("too late; already running");return n}function Mt(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function J0(e,t,n){var o=e.__transition,i;o[t]=n,n.timer=fd(s,0,n.time);function s(u){n.state=Ca,n.timer.restart(r,n.delay,n.time),n.delay<=u&&r(u-n.delay)}function r(u){var c,d,p,h;if(n.state!==Ca)return a();for(c in o)if(h=o[c],h.name===n.name){if(h.state===Ii)return Sa(r);h.state===Na?(h.state=ki,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete o[c]):+cSr&&o.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function My(e,t,n){var o,i,s=Ty(t)?ol:Zt;return function(){var r=s(this,e),l=r.on;l!==o&&(i=(o=l).copy()).on(t,n),r.on=i}}function $y(e,t){var n=this._id;return arguments.length<2?Mt(this.node(),n).on.on(e):this.each(My(n,e,t))}function Iy(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function ky(){return this.on("end.remove",Iy(this._id))}function Py(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Jr(e));for(var o=this._groups,i=o.length,s=new Array(i),r=0;r()=>e;function o2(e,{sourceEvent:t,target:n,transform:o,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:o,enumerable:!0,configurable:!0},_:{value:i}})}function on(e,t,n){this.k=e,this.x=t,this.y=n}on.prototype={constructor:on,scale:function(e){return e===1?this:new on(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new on(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var fo=new on(1,0,0);on.prototype;function js(e){e.stopImmediatePropagation()}function wo(e){e.preventDefault(),e.stopImmediatePropagation()}function i2(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function s2(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Ta(){return this.__zoom||fo}function r2(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function l2(){return navigator.maxTouchPoints||"ontouchstart"in this}function a2(e,t,n){var o=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],s=e.invertY(t[0][1])-n[0][1],r=e.invertY(t[1][1])-n[1][1];return e.translate(i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i),r>s?(s+r)/2:Math.min(0,s)||Math.max(0,r))}function u2(){var e=i2,t=s2,n=a2,o=r2,i=l2,s=[0,1/0],r=[[-1/0,-1/0],[1/0,1/0]],l=250,a=$i,u=ys("start","zoom","end"),c,d,p,h=500,b=150,E=0,N=10;function M(T){T.property("__zoom",Ta).on("wheel.zoom",H,{passive:!1}).on("mousedown.zoom",F).on("dblclick.zoom",Z).filter(i).on("touchstart.zoom",j).on("touchmove.zoom",C).on("touchend.zoom touchcancel.zoom",ee).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}M.transform=function(T,G,k,L){var $=T.selection?T.selection():T;$.property("__zoom",Ta),T!==$?O(T,G,k,L):$.interrupt().each(function(){U(this,arguments).event(L).start().zoom(null,typeof G=="function"?G.apply(this,arguments):G).end()})},M.scaleBy=function(T,G,k,L){M.scaleTo(T,function(){var $=this.__zoom.k,D=typeof G=="function"?G.apply(this,arguments):G;return $*D},k,L)},M.scaleTo=function(T,G,k,L){M.transform(T,function(){var $=t.apply(this,arguments),D=this.__zoom,V=k==null?_($):typeof k=="function"?k.apply(this,arguments):k,Y=D.invert(V),J=typeof G=="function"?G.apply(this,arguments):G;return n(g(P(D,J),V,Y),$,r)},k,L)},M.translateBy=function(T,G,k,L){M.transform(T,function(){return n(this.__zoom.translate(typeof G=="function"?G.apply(this,arguments):G,typeof k=="function"?k.apply(this,arguments):k),t.apply(this,arguments),r)},null,L)},M.translateTo=function(T,G,k,L,$){M.transform(T,function(){var D=t.apply(this,arguments),V=this.__zoom,Y=L==null?_(D):typeof L=="function"?L.apply(this,arguments):L;return n(fo.translate(Y[0],Y[1]).scale(V.k).translate(typeof G=="function"?-G.apply(this,arguments):-G,typeof k=="function"?-k.apply(this,arguments):-k),D,r)},L,$)};function P(T,G){return G=Math.max(s[0],Math.min(s[1],G)),G===T.k?T:new on(G,T.x,T.y)}function g(T,G,k){var L=G[0]-k[0]*T.k,$=G[1]-k[1]*T.k;return L===T.x&&$===T.y?T:new on(T.k,L,$)}function _(T){return[(+T[0][0]+ +T[1][0])/2,(+T[0][1]+ +T[1][1])/2]}function O(T,G,k,L){T.on("start.zoom",function(){U(this,arguments).event(L).start()}).on("interrupt.zoom end.zoom",function(){U(this,arguments).event(L).end()}).tween("zoom",function(){var $=this,D=arguments,V=U($,D).event(L),Y=t.apply($,D),J=k==null?_(Y):typeof k=="function"?k.apply($,D):k,ue=Math.max(Y[1][0]-Y[0][0],Y[1][1]-Y[0][1]),Q=$.__zoom,ie=typeof G=="function"?G.apply($,D):G,le=a(Q.invert(J).concat(ue/Q.k),ie.invert(J).concat(ue/ie.k));return function(me){if(me===1)me=ie;else{var be=le(me),fe=ue/be[2];me=new on(fe,J[0]-be[0]*fe,J[1]-be[1]*fe)}V.zoom(null,me)}})}function U(T,G,k){return!k&&T.__zooming||new X(T,G)}function X(T,G){this.that=T,this.args=G,this.active=0,this.sourceEvent=null,this.extent=t.apply(T,G),this.taps=0}X.prototype={event:function(T){return T&&(this.sourceEvent=T),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(T,G){return this.mouse&&T!=="mouse"&&(this.mouse[1]=G.invert(this.mouse[0])),this.touch0&&T!=="touch"&&(this.touch0[1]=G.invert(this.touch0[0])),this.touch1&&T!=="touch"&&(this.touch1[1]=G.invert(this.touch1[0])),this.that.__zoom=G,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(T){var G=wt(this.that).datum();u.call(T,this.that,new o2(T,{sourceEvent:this.sourceEvent,target:M,transform:this.that.__zoom,dispatch:u}),G)}};function H(T,...G){if(!e.apply(this,arguments))return;var k=U(this,G).event(T),L=this.__zoom,$=Math.max(s[0],Math.min(s[1],L.k*Math.pow(2,o.apply(this,arguments)))),D=Ot(T);if(k.wheel)(k.mouse[0][0]!==D[0]||k.mouse[0][1]!==D[1])&&(k.mouse[1]=L.invert(k.mouse[0]=D)),clearTimeout(k.wheel);else{if(L.k===$)return;k.mouse=[D,L.invert(D)],Pi(this),k.start()}wo(T),k.wheel=setTimeout(V,b),k.zoom("mouse",n(g(P(L,$),k.mouse[0],k.mouse[1]),k.extent,r));function V(){k.wheel=null,k.end()}}function F(T,...G){if(p||!e.apply(this,arguments))return;var k=T.currentTarget,L=U(this,G,!0).event(T),$=wt(T.view).on("mousemove.zoom",J,!0).on("mouseup.zoom",ue,!0),D=Ot(T,k),V=T.clientX,Y=T.clientY;nd(T.view),js(T),L.mouse=[D,this.__zoom.invert(D)],Pi(this),L.start();function J(Q){if(wo(Q),!L.moved){var ie=Q.clientX-V,le=Q.clientY-Y;L.moved=ie*ie+le*le>E}L.event(Q).zoom("mouse",n(g(L.that.__zoom,L.mouse[0]=Ot(Q,k),L.mouse[1]),L.extent,r))}function ue(Q){$.on("mousemove.zoom mouseup.zoom",null),od(Q.view,L.moved),wo(Q),L.event(Q).end()}}function Z(T,...G){if(e.apply(this,arguments)){var k=this.__zoom,L=Ot(T.changedTouches?T.changedTouches[0]:T,this),$=k.invert(L),D=k.k*(T.shiftKey?.5:2),V=n(g(P(k,D),L,$),t.apply(this,G),r);wo(T),l>0?wt(this).transition().duration(l).call(O,V,L,T):wt(this).call(M.transform,V,L,T)}}function j(T,...G){if(e.apply(this,arguments)){var k=T.touches,L=k.length,$=U(this,G,T.changedTouches.length===L).event(T),D,V,Y,J;for(js(T),V=0;V(e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom",e))(ae||{}),sl=(e=>(e.Partial="partial",e.Full="full",e))(sl||{}),An=(e=>(e.Bezier="default",e.SimpleBezier="simple-bezier",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e))(An||{}),Cn=(e=>(e.Strict="strict",e.Loose="loose",e))(Cn||{}),Nr=(e=>(e.Arrow="arrow",e.ArrowClosed="arrowclosed",e))(Nr||{}),Vo=(e=>(e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal",e))(Vo||{});const c2=["INPUT","SELECT","TEXTAREA"],d2=typeof document<"u"?document:null;function Tr(e){var t,n;const o=((n=(t=e.composedPath)==null?void 0:t.call(e))==null?void 0:n[0])||e.target,i=typeof o?.hasAttribute=="function"?o.hasAttribute("contenteditable"):!1,s=typeof o?.closest=="function"?o.closest(".nokey"):null;return c2.includes(o?.nodeName)||i||!!s}function f2(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function Ma(e,t,n,o){const i=t.replace("+",` +`).replace(` + +`,` ++`).split(` +`).map(r=>r.trim().toLowerCase());if(i.length===1)return e.toLowerCase()===t.toLowerCase();o||n.add(e.toLowerCase());const s=i.every((r,l)=>n.has(r)&&Array.from(n.values())[l]===i[l]);return o&&n.delete(e.toLowerCase()),s}function h2(e,t){return n=>{if(!n.code&&!n.key)return!1;const o=p2(n.code,e);return Array.isArray(e)?e.some(i=>Ma(n[o],i,t,n.type==="keyup")):Ma(n[o],e,t,n.type==="keyup")}}function p2(e,t){return t.includes(e)?"code":"key"}function Bo(e,t){const n=pe(()=>Ee(t?.target)??d2),o=zo(Ee(e)===!0);let i=!1;const s=new Set;let r=a(Ee(e));xe(()=>Ee(e),(u,c)=>{typeof c=="boolean"&&typeof u!="boolean"&&l(),r=a(u)},{immediate:!0}),Uc(["blur","contextmenu"],l),ca((...u)=>r(...u),u=>{var c,d;const p=Ee(t?.actInsideInputWithModifier)??!0,h=Ee(t?.preventDefault)??!1;if(i=f2(u),(!i||i&&!p)&&Tr(u))return;const E=((d=(c=u.composedPath)==null?void 0:c.call(u))==null?void 0:d[0])||u.target,N=E?.nodeName==="BUTTON"||E?.nodeName==="A";!h&&(i||!N)&&u.preventDefault(),o.value=!0},{eventName:"keydown",target:n}),ca((...u)=>r(...u),u=>{const c=Ee(t?.actInsideInputWithModifier)??!0;if(o.value){if((!i||i&&!c)&&Tr(u))return;i=!1,o.value=!1}},{eventName:"keyup",target:n});function l(){i=!1,s.clear(),o.value=Ee(e)===!0}function a(u){return u===null?(l(),()=>!1):typeof u=="boolean"?(l(),o.value=u,()=>!1):Array.isArray(u)||typeof u=="string"?h2(u,s):u}return o}const md="vue-flow__node-desc",yd="vue-flow__edge-desc",g2="vue-flow__aria-live",_d=["Enter"," ","Escape"],so={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};function Wi(e){return{...e.computedPosition||{x:0,y:0},width:e.dimensions.width||0,height:e.dimensions.height||0}}function Zi(e,t){const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),o=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*o)}function xs(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Yn(e,t=0,n=1){return Math.min(Math.max(e,t),n)}function bd(e,t){return{x:Yn(e.x,t[0][0],t[1][0]),y:Yn(e.y,t[0][1],t[1][1])}}function $a(e){const t=e.getRootNode();return"elementFromPoint"in t?t:window.document}function Nn(e){return e&&typeof e=="object"&&"id"in e&&"source"in e&&"target"in e}function zn(e){return e&&typeof e=="object"&&"id"in e&&"position"in e&&!Nn(e)}function Co(e){return zn(e)&&"computedPosition"in e}function yi(e){return!Number.isNaN(e)&&Number.isFinite(e)}function v2(e){return yi(e.width)&&yi(e.height)&&yi(e.x)&&yi(e.y)}function m2(e,t,n){const o={id:e.id.toString(),type:e.type??"default",dimensions:an({width:0,height:0}),computedPosition:an({z:0,...e.position}),handleBounds:{source:[],target:[]},draggable:void 0,selectable:void 0,connectable:void 0,focusable:void 0,selected:!1,dragging:!1,resizing:!1,initialized:!1,isParent:!1,position:{x:0,y:0},data:He(e.data)?e.data:{},events:an(He(e.events)?e.events:{})};return Object.assign(t??o,e,{id:e.id.toString(),parentNode:n})}function wd(e,t,n){var o,i;const s={id:e.id.toString(),type:e.type??t?.type??"default",source:e.source.toString(),target:e.target.toString(),sourceHandle:(o=e.sourceHandle)==null?void 0:o.toString(),targetHandle:(i=e.targetHandle)==null?void 0:i.toString(),updatable:e.updatable??n?.updatable,selectable:e.selectable??n?.selectable,focusable:e.focusable??n?.focusable,data:He(e.data)?e.data:{},events:an(He(e.events)?e.events:{}),label:e.label??"",interactionWidth:e.interactionWidth??n?.interactionWidth,...n??{}};return Object.assign(t??s,e,{id:e.id.toString()})}function xd(e,t,n,o){const i=typeof e=="string"?e:e.id,s=new Set,r=o==="source"?"target":"source";for(const l of n)l[r]===i&&s.add(l[o]);return t.filter(l=>s.has(l.id))}function y2(...e){if(e.length===3){const[s,r,l]=e;return xd(s,r,l,"target")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(s=>Nn(s)&&s.source===o).map(s=>n.find(r=>zn(r)&&r.id===s.target))}function _2(...e){if(e.length===3){const[s,r,l]=e;return xd(s,r,l,"source")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(s=>Nn(s)&&s.target===o).map(s=>n.find(r=>zn(r)&&r.id===s.source))}function Ed({source:e,sourceHandle:t,target:n,targetHandle:o}){return`vueflow__edge-${e}${t??""}-${n}${o??""}`}function b2(e,t){return t.some(n=>Nn(n)&&n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle))}function Mr({x:e,y:t},{x:n,y:o,zoom:i}){return{x:e*i+n,y:t*i+o}}function Qo({x:e,y:t},{x:n,y:o,zoom:i},s=!1,r=[1,1]){const l={x:(e-n)/i,y:(t-o)/i};return s?Es(l,r):l}function w2(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}}function Sd({x:e,y:t,width:n,height:o}){return{x:e,y:t,x2:e+n,y2:t+o}}function x2({x:e,y:t,x2:n,y2:o}){return{x:e,y:t,width:n-e,height:o-t}}function Cd(e){let t={x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY,x2:Number.NEGATIVE_INFINITY,y2:Number.NEGATIVE_INFINITY};for(let n=0;n0,N=(d??0)*(p??0);(b||E||h>=N||l.dragging)&&r.push(l)}return r}function Td(e,t){const n=new Set;if(typeof e=="string")n.add(e);else if(e.length>=1)for(const o of e)n.add(o.id);return t.filter(o=>n.has(o.source)||n.has(o.target))}function Ia(e,t,n,o,i,s=.1,r={x:0,y:0}){const l=t/(e.width*(1+s)),a=n/(e.height*(1+s)),u=Math.min(l,a),c=Yn(u,o,i),d=e.x+e.width/2,p=e.y+e.height/2,h=t/2-d*c+(r.x??0),b=n/2-p*c+(r.y??0);return{x:h,y:b,zoom:c}}function E2(e,t){return{x:t.x+e.x,y:t.y+e.y,z:(e.z>t.z?e.z:t.z)+1}}function Md(e,t){if(!e.parentNode)return!1;const n=t(e.parentNode);return n?n.selected?!0:Md(n,t):!1}function ei(e,t){return typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}function ka(e,t,n){return en?-Yn(Math.abs(e-n),1,t)/t:0}function $d(e,t,n=15,o=40){const i=ka(e.x,o,t.width-o)*n,s=ka(e.y,o,t.height-o)*n;return[i,s]}function Ys(e,t){if(t){const n=e.position.x+e.dimensions.width-t.dimensions.width,o=e.position.y+e.dimensions.height-t.dimensions.height;if(n>0||o>0||e.position.x<0||e.position.y<0){let i={};if(typeof t.style=="function"?i={...t.style(t)}:t.style&&(i={...t.style}),i.width=i.width??`${t.dimensions.width}px`,i.height=i.height??`${t.dimensions.height}px`,n>0)if(typeof i.width=="string"){const s=Number(i.width.replace("px",""));i.width=`${s+n}px`}else i.width+=n;if(o>0)if(typeof i.height=="string"){const s=Number(i.height.replace("px",""));i.height=`${s+o}px`}else i.height+=o;if(e.position.x<0){const s=Math.abs(e.position.x);if(t.position.x=t.position.x-s,typeof i.width=="string"){const r=Number(i.width.replace("px",""));i.width=`${r+s}px`}else i.width+=s;e.position.x=0}if(e.position.y<0){const s=Math.abs(e.position.y);if(t.position.y=t.position.y-s,typeof i.height=="string"){const r=Number(i.height.replace("px",""));i.height=`${r+s}px`}else i.height+=s;e.position.y=0}t.dimensions.width=Number(i.width.toString().replace("px","")),t.dimensions.height=Number(i.height.toString().replace("px","")),typeof t.style=="function"?t.style=s=>{const r=t.style;return{...r(s),...i}}:t.style={...t.style,...i}}}}function Pa(e,t){var n,o;const i=e.filter(r=>r.type==="add"||r.type==="remove");for(const r of i)if(r.type==="add")t.findIndex(a=>a.id===r.item.id)===-1&&t.push(r.item);else if(r.type==="remove"){const l=t.findIndex(a=>a.id===r.id);l!==-1&&t.splice(l,1)}const s=t.map(r=>r.id);for(const r of t)for(const l of e)if(l.id===r.id)switch(l.type){case"select":r.selected=l.selected;break;case"position":if(Co(r)&&(typeof l.position<"u"&&(r.position=l.position),typeof l.dragging<"u"&&(r.dragging=l.dragging),r.expandParent&&r.parentNode)){const a=t[s.indexOf(r.parentNode)];a&&Co(a)&&Ys(r,a)}break;case"dimensions":if(Co(r)&&(typeof l.dimensions<"u"&&(r.dimensions=l.dimensions),typeof l.updateStyle<"u"&&l.updateStyle&&(r.style={...r.style||{},width:`${(n=l.dimensions)==null?void 0:n.width}px`,height:`${(o=l.dimensions)==null?void 0:o.height}px`}),typeof l.resizing<"u"&&(r.resizing=l.resizing),r.expandParent&&r.parentNode)){const a=t[s.indexOf(r.parentNode)];a&&Co(a)&&(!!a.dimensions.width&&!!a.dimensions.height?Ys(r,a):ht(()=>{Ys(r,a)}))}break}return t}function _n(e,t){return{id:e,type:"select",selected:t}}function Aa(e){return{item:e,type:"add"}}function Da(e){return{id:e,type:"remove"}}function Oa(e,t,n,o,i){return{id:e,source:t,target:n,sourceHandle:o||null,targetHandle:i||null,type:"remove"}}function xn(e,t=new Set,n=!1){const o=[];for(const[i,s]of e){const r=t.has(i);!(s.selected===void 0&&!r)&&s.selected!==r&&(n&&(s.selected=r),o.push(_n(s.id,r)))}return o}function re(e){const t=new Set;let n=!1;const o=()=>t.size>0;e&&(n=!0,t.add(e));const i=l=>{t.delete(l)};return{on:l=>{e&&n&&t.delete(e),t.add(l);const a=()=>{i(l),e&&n&&t.add(e)};return ms(a),{off:a}},off:i,trigger:l=>Promise.all(Array.from(t).map(a=>a(l))),hasListeners:o,fns:t}}function Ra(e,t,n){let o=e;do{if(o&&o.matches(t))return!0;if(o===n)return!1;o=o.parentElement}while(o);return!1}function S2(e,t,n,o,i){var s,r;const l=[];for(const a of e)(a.selected||a.id===i)&&(!a.parentNode||!Md(a,o))&&(a.draggable||t&&typeof a.draggable>"u")&&l.push(an({id:a.id,position:a.position||{x:0,y:0},distance:{x:n.x-((s=a.computedPosition)==null?void 0:s.x)||0,y:n.y-((r=a.computedPosition)==null?void 0:r.y)||0},from:a.computedPosition,extent:a.extent,parentNode:a.parentNode,dimensions:a.dimensions,expandParent:a.expandParent}));return l}function Ks({id:e,dragItems:t,findNode:n}){const o=[];for(const i of t){const s=n(i.id);s&&o.push(s)}return[e?o.find(i=>i.id===e):o[0],o]}function Id(e){if(Array.isArray(e))switch(e.length){case 1:return[e[0],e[0],e[0],e[0]];case 2:return[e[0],e[1],e[0],e[1]];case 3:return[e[0],e[1],e[2],e[1]];case 4:return e;default:return[0,0,0,0]}return[e,e,e,e]}function C2(e,t,n){const[o,i,s,r]=typeof e!="string"?Id(e.padding):[0,0,0,0];return n&&typeof n.computedPosition.x<"u"&&typeof n.computedPosition.y<"u"&&typeof n.dimensions.width<"u"&&typeof n.dimensions.height<"u"?[[n.computedPosition.x+r,n.computedPosition.y+o],[n.computedPosition.x+n.dimensions.width-i,n.computedPosition.y+n.dimensions.height-s]]:!1}function N2(e,t,n,o){let i=e.extent||n;if((i==="parent"||!Array.isArray(i)&&i?.range==="parent")&&!e.expandParent)if(e.parentNode&&o&&e.dimensions.width&&e.dimensions.height){const s=C2(i,e,o);s&&(i=s)}else t(new Ge(Ue.NODE_EXTENT_INVALID,e.id)),i=n;else if(Array.isArray(i)){const s=o?.computedPosition.x||0,r=o?.computedPosition.y||0;i=[[i[0][0]+s,i[0][1]+r],[i[1][0]+s,i[1][1]+r]]}else if(i!=="parent"&&i?.range&&Array.isArray(i.range)){const[s,r,l,a]=Id(i.padding),u=o?.computedPosition.x||0,c=o?.computedPosition.y||0;i=[[i.range[0][0]+u+a,i.range[0][1]+c+s],[i.range[1][0]+u-r,i.range[1][1]+c-l]]}return i==="parent"?[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]]:i}function T2({width:e,height:t},n){return[n[0],[n[1][0]-(e||0),n[1][1]-(t||0)]]}function rl(e,t,n,o,i){const s=T2(e.dimensions,N2(e,n,o,i)),r=bd(t,s);return{position:{x:r.x-(i?.computedPosition.x||0),y:r.y-(i?.computedPosition.y||0)},computedPosition:r}}function ho(e,t,n=ae.Left,o=!1){const i=(t?.x??0)+e.computedPosition.x,s=(t?.y??0)+e.computedPosition.y,{width:r,height:l}=t??k2(e);if(o)return{x:i+r/2,y:s+l/2};switch(t?.position??n){case ae.Top:return{x:i+r/2,y:s};case ae.Right:return{x:i+r,y:s+l/2};case ae.Bottom:return{x:i+r/2,y:s+l};case ae.Left:return{x:i,y:s+l/2}}}function Va(e,t){return e&&(t?e.find(n=>n.id===t):e[0])||null}function M2({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:o,targetWidth:i,targetHeight:s,width:r,height:l,viewport:a}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+o,t.y+s)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const c=Sd({x:(0-a.x)/a.zoom,y:(0-a.y)/a.zoom,width:r/a.zoom,height:l/a.zoom}),d=Math.max(0,Math.min(c.x2,u.x2)-Math.max(c.x,u.x)),p=Math.max(0,Math.min(c.y2,u.y2)-Math.max(c.y,u.y));return Math.ceil(d*p)>0}function $2(e,t,n=!1){const o=typeof e.zIndex=="number";let i=o?e.zIndex:0;const s=t(e.source),r=t(e.target);return!s||!r?0:(n&&(i=o?e.zIndex:Math.max(s.computedPosition.z||0,r.computedPosition.z||0)),i)}var Ue=(e=>(e.MISSING_STYLES="MISSING_STYLES",e.MISSING_VIEWPORT_DIMENSIONS="MISSING_VIEWPORT_DIMENSIONS",e.NODE_INVALID="NODE_INVALID",e.NODE_NOT_FOUND="NODE_NOT_FOUND",e.NODE_MISSING_PARENT="NODE_MISSING_PARENT",e.NODE_TYPE_MISSING="NODE_TYPE_MISSING",e.NODE_EXTENT_INVALID="NODE_EXTENT_INVALID",e.EDGE_INVALID="EDGE_INVALID",e.EDGE_NOT_FOUND="EDGE_NOT_FOUND",e.EDGE_SOURCE_MISSING="EDGE_SOURCE_MISSING",e.EDGE_TARGET_MISSING="EDGE_TARGET_MISSING",e.EDGE_TYPE_MISSING="EDGE_TYPE_MISSING",e.EDGE_SOURCE_TARGET_SAME="EDGE_SOURCE_TARGET_SAME",e.EDGE_SOURCE_TARGET_MISSING="EDGE_SOURCE_TARGET_MISSING",e.EDGE_ORPHANED="EDGE_ORPHANED",e.USEVUEFLOW_OPTIONS="USEVUEFLOW_OPTIONS",e))(Ue||{});const Ba={MISSING_STYLES:()=>"It seems that you haven't loaded the necessary styles. Please import '@vue-flow/core/dist/style.css' to ensure that the graph is rendered correctly",MISSING_VIEWPORT_DIMENSIONS:()=>"The Vue Flow parent container needs a width and a height to render the graph",NODE_INVALID:e=>`Node is invalid +Node: ${e}`,NODE_NOT_FOUND:e=>`Node not found +Node: ${e}`,NODE_MISSING_PARENT:(e,t)=>`Node is missing a parent +Node: ${e} +Parent: ${t}`,NODE_TYPE_MISSING:e=>`Node type is missing +Type: ${e}`,NODE_EXTENT_INVALID:e=>`Only child nodes can use a parent extent +Node: ${e}`,EDGE_INVALID:e=>`An edge needs a source and a target +Edge: ${e}`,EDGE_SOURCE_MISSING:(e,t)=>`Edge source is missing +Edge: ${e} +Source: ${t}`,EDGE_TARGET_MISSING:(e,t)=>`Edge target is missing +Edge: ${e} +Target: ${t}`,EDGE_TYPE_MISSING:e=>`Edge type is missing +Type: ${e}`,EDGE_SOURCE_TARGET_SAME:(e,t,n)=>`Edge source and target are the same +Edge: ${e} +Source: ${t} +Target: ${n}`,EDGE_SOURCE_TARGET_MISSING:(e,t,n)=>`Edge source or target is missing +Edge: ${e} +Source: ${t} +Target: ${n}`,EDGE_ORPHANED:e=>`Edge was orphaned (suddenly missing source or target) and has been removed +Edge: ${e}`,EDGE_NOT_FOUND:e=>`Edge not found +Edge: ${e}`,USEVUEFLOW_OPTIONS:()=>"The options parameter is deprecated and will be removed in the next major version. Please use the id parameter instead"};class Ge extends Error{constructor(t,...n){var o;super((o=Ba[t])==null?void 0:o.call(Ba,...n)),this.name="VueFlowError",this.code=t,this.args=n}}function ll(e){return"clientX"in e}function I2(e){return"sourceEvent"in e}function Bt(e,t){const n=ll(e);let o,i;return n?(o=e.clientX,i=e.clientY):"touches"in e&&e.touches.length>0?(o=e.touches[0].clientX,i=e.touches[0].clientY):"changedTouches"in e&&e.changedTouches.length>0?(o=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY):(o=0,i=0),{x:o-(t?.left??0),y:i-(t?.top??0)}}const qi=()=>{var e;return typeof navigator<"u"&&((e=navigator?.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function k2(e){var t,n;return{width:((t=e.dimensions)==null?void 0:t.width)??e.width??0,height:((n=e.dimensions)==null?void 0:n.height)??e.height??0}}function Es(e,t=[1,1]){return{x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}}const P2=()=>!0;function Xs(e){e?.classList.remove("valid","connecting","vue-flow__handle-valid","vue-flow__handle-connecting")}function A2(e,t,n){const o=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const s of t.values())Zi(i,Wi(s))>0&&o.push(s);return o}const D2=250;function O2(e,t,n,o){var i,s;let r=[],l=Number.POSITIVE_INFINITY;const a=A2(e,n,t+D2);for(const u of a){const c=[...((i=u.handleBounds)==null?void 0:i.source)??[],...((s=u.handleBounds)==null?void 0:s.target)??[]];for(const d of c){if(o.nodeId===d.nodeId&&o.type===d.type&&o.id===d.id)continue;const{x:p,y:h}=ho(u,d,d.position,!0),b=Math.sqrt((p-e.x)**2+(h-e.y)**2);b>t||(b1){const u=o.type==="source"?"target":"source";return r.find(c=>c.type===u)??r[0]}return r[0]}function La(e,{handle:t,connectionMode:n,fromNodeId:o,fromHandleId:i,fromType:s,doc:r,lib:l,flowId:a,isValidConnection:u=P2},c,d,p){const h=s==="target",b=t?r.querySelector(`.${l}-flow__handle[data-id="${a}-${t?.nodeId}-${t?.id}-${t?.type}"]`):null,{x:E,y:N}=Bt(e),M=r.elementFromPoint(E,N),P=M?.classList.contains(`${l}-flow__handle`)?M:b,g={handleDomNode:P,isValid:!1,connection:null,toHandle:null};if(P){const _=kd(void 0,P),O=P.getAttribute("data-nodeid"),U=P.getAttribute("data-handleid"),X=P.classList.contains("connectable"),H=P.classList.contains("connectableend");if(!O||!_)return g;const F={source:h?O:o,sourceHandle:h?U:i,target:h?o:O,targetHandle:h?i:U};g.connection=F;const j=X&&H&&(n===Cn.Strict?h&&_==="source"||!h&&_==="target":O!==o||U!==i);g.isValid=j&&u(F,{nodes:d,edges:c,sourceNode:p(o),targetNode:p(O)}),g.toHandle=t}return g}function kd(e,t){return e||(t?.classList.contains("target")?"target":t?.classList.contains("source")?"source":null)}function R2(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function V2(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}function B2(e,t,n,o,i,s=!1){var r,l,a;const u=o.get(e);if(!u)return null;const c=i===Cn.Strict?(r=u.handleBounds)==null?void 0:r[t]:[...((l=u.handleBounds)==null?void 0:l.source)??[],...((a=u.handleBounds)==null?void 0:a.target)??[]],d=(n?c?.find(p=>p.id===n):c?.[0])??null;return d&&s?{...d,...ho(u,d,d.position,!0)}:d}const $r={[ae.Left]:ae.Right,[ae.Right]:ae.Left,[ae.Top]:ae.Bottom,[ae.Bottom]:ae.Top},L2=["production","prod"];function Ss(e,...t){Pd()&&console.warn(`[Vue Flow]: ${e}`,...t)}function Pd(){return!L2.includes("production")}function Fa(e,t,n,o,i){const s=t.querySelectorAll(`.vue-flow__handle.${e}`);return s?.length?Array.from(s).map(r=>{const l=r.getBoundingClientRect();return{id:r.getAttribute("data-handleid"),type:e,nodeId:i,position:r.getAttribute("data-handlepos"),x:(l.left-n.left)/o,y:(l.top-n.top)/o,...xs(r)}}):null}function Ir(e,t,n,o,i,s=!1,r){i.value=!1,e.selected?(s||e.selected&&t)&&(o([e]),ht(()=>{r.blur()})):n([e])}function He(e){return typeof oe(e)<"u"}function F2(e,t,n,o){if(!e||!e.source||!e.target)return n(new Ge(Ue.EDGE_INVALID,e?.id??"[ID UNKNOWN]")),!1;let i;return Nn(e)?i=e:i={...e,id:Ed(e)},i=wd(i,void 0,o),b2(i,t)?!1:i}function z2(e,t,n,o,i){if(!t.source||!t.target)return i(new Ge(Ue.EDGE_INVALID,e.id)),!1;if(!n)return i(new Ge(Ue.EDGE_NOT_FOUND,e.id)),!1;const{id:s,...r}=e;return{...r,id:o?Ed(t):s,source:t.source,target:t.target,sourceHandle:t.sourceHandle,targetHandle:t.targetHandle}}function za(e,t,n){const o={},i=[];for(let s=0;sl.id===s.parentNode);s.parentNode&&!r&&n(new Ge(Ue.NODE_MISSING_PARENT,s.id,s.parentNode)),(s.parentNode||o[s.id])&&(o[s.id]&&(s.isParent=!0),r&&(r.isParent=!0))}return i}function Ha(e,t,n,o,i,s){let r=i;const l=o.get(r)||new Map;o.set(r,l.set(n,t)),r=`${i}-${e}`;const a=o.get(r)||new Map;if(o.set(r,a.set(n,t)),s){r=`${i}-${e}-${s}`;const u=o.get(r)||new Map;o.set(r,u.set(n,t))}}function Ws(e,t,n){e.clear();for(const o of n){const{source:i,target:s,sourceHandle:r=null,targetHandle:l=null}=o,a={edgeId:o.id,source:i,target:s,sourceHandle:r,targetHandle:l},u=`${i}-${r}--${s}-${l}`,c=`${s}-${l}--${i}-${r}`;Ha("source",a,c,e,i,r),Ha("target",a,u,e,s,l)}}function Ua(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function Zs(e,t,n,o,i,s,r,l){const a=[];for(const u of e){const c=Nn(u)?u:F2(u,l,i,s);if(!c)continue;const d=n(c.source),p=n(c.target);if(!d||!p){i(new Ge(Ue.EDGE_SOURCE_TARGET_MISSING,c.id,c.source,c.target));continue}if(!d){i(new Ge(Ue.EDGE_SOURCE_MISSING,c.id,c.source));continue}if(!p){i(new Ge(Ue.EDGE_TARGET_MISSING,c.id,c.target));continue}if(t&&!t(c,{edges:l,nodes:r,sourceNode:d,targetNode:p})){i(new Ge(Ue.EDGE_INVALID,c.id));continue}const h=o(c.id);a.push({...wd(c,h,s),sourceNode:d,targetNode:p})}return a}const Ga=Symbol("vueFlow"),Ad=Symbol("nodeId"),Dd=Symbol("nodeRef"),H2=Symbol("edgeId"),U2=Symbol("edgeRef"),Cs=Symbol("slots");function Od(e){const{vueFlowRef:t,snapToGrid:n,snapGrid:o,noDragClassName:i,nodes:s,nodeExtent:r,nodeDragThreshold:l,viewport:a,autoPanOnNodeDrag:u,autoPanSpeed:c,nodesDraggable:d,panBy:p,findNode:h,multiSelectionActive:b,nodesSelectionActive:E,selectNodesOnDrag:N,removeSelectedElements:M,addSelectedNodes:P,updateNodePositions:g,emits:_}=Fe(),{onStart:O,onDrag:U,onStop:X,onClick:H,el:F,disabled:Z,id:j,selectable:C,dragHandle:ee}=e,T=zo(!1);let G=[],k,L=null,$={x:void 0,y:void 0},D={x:0,y:0},V=null,Y=!1,J=0,ue=!1;const Q=Y2(),ie=({x:de,y:w})=>{$={x:de,y:w};let S=!1;if(G=G.map(f=>{const v={x:de-f.distance.x,y:w-f.distance.y},{computedPosition:y}=rl(f,n.value?Es(v,o.value):v,_.error,r.value,f.parentNode?h(f.parentNode):void 0);return S=S||f.position.x!==y.x||f.position.y!==y.y,f.position=y,f}),!!S&&(g(G,!0,!0),T.value=!0,V)){const[f,v]=Ks({id:j,dragItems:G,findNode:h});U({event:V,node:f,nodes:v})}},le=()=>{if(!L)return;const[de,w]=$d(D,L,c.value);if(de!==0||w!==0){const S={x:($.x??0)-de/a.value.zoom,y:($.y??0)-w/a.value.zoom};p({x:de,y:w})&&ie(S)}J=requestAnimationFrame(le)},me=(de,w)=>{Y=!0;const S=h(j);!N.value&&!b.value&&S&&(S.selected||M()),S&&Ee(C)&&N.value&&Ir(S,b.value,P,M,E,!1,w);const f=Q(de.sourceEvent);if($=f,G=S2(s.value,d.value,f,h,j),G.length){const[v,y]=Ks({id:j,dragItems:G,findNode:h});O({event:de.sourceEvent,node:v,nodes:y})}},be=(de,w)=>{var S;de.sourceEvent.type==="touchmove"&&de.sourceEvent.touches.length>1||(l.value===0&&me(de,w),$=Q(de.sourceEvent),L=((S=t.value)==null?void 0:S.getBoundingClientRect())||null,D=Bt(de.sourceEvent,L))},fe=(de,w)=>{const S=Q(de.sourceEvent);if(!ue&&Y&&u.value&&(ue=!0,le()),!Y){const f=S.xSnapped-($.x??0),v=S.ySnapped-($.y??0);Math.sqrt(f*f+v*v)>l.value&&me(de,w)}($.x!==S.xSnapped||$.y!==S.ySnapped)&&G.length&&Y&&(V=de.sourceEvent,D=Bt(de.sourceEvent,L),ie(S))},we=de=>{let w=!1;if(!Y&&!T.value&&!b.value){const S=de.sourceEvent,f=Q(S),v=f.xSnapped-($.x??0),y=f.ySnapped-($.y??0),m=Math.sqrt(v*v+y*y);m!==0&&m<=l.value&&(H?.(S),w=!0)}if(G.length&&!w){g(G,!1,!1);const[S,f]=Ks({id:j,dragItems:G,findNode:h});X({event:de.sourceEvent,node:S,nodes:f})}G=[],T.value=!1,ue=!1,Y=!1,$={x:void 0,y:void 0},cancelAnimationFrame(J)};return xe([()=>Ee(Z),F],([de,w],S,f)=>{if(w){const v=wt(w);de||(k=v0().on("start",y=>be(y,w)).on("drag",y=>fe(y,w)).on("end",y=>we(y)).filter(y=>{const m=y.target,I=Ee(ee);return!y.button&&(!i.value||!Ra(m,`.${i.value}`,w)&&(!I||Ra(m,I,w)))}),v.call(k)),f(()=>{v.on(".drag",null),k&&(k.on("start",null),k.on("drag",null),k.on("end",null))})}}),T}function G2(){return{doubleClick:re(),click:re(),mouseEnter:re(),mouseMove:re(),mouseLeave:re(),contextMenu:re(),updateStart:re(),update:re(),updateEnd:re()}}function j2(e,t){const n=G2();return n.doubleClick.on(o=>{var i,s;t.edgeDoubleClick(o),(s=(i=e.events)==null?void 0:i.doubleClick)==null||s.call(i,o)}),n.click.on(o=>{var i,s;t.edgeClick(o),(s=(i=e.events)==null?void 0:i.click)==null||s.call(i,o)}),n.mouseEnter.on(o=>{var i,s;t.edgeMouseEnter(o),(s=(i=e.events)==null?void 0:i.mouseEnter)==null||s.call(i,o)}),n.mouseMove.on(o=>{var i,s;t.edgeMouseMove(o),(s=(i=e.events)==null?void 0:i.mouseMove)==null||s.call(i,o)}),n.mouseLeave.on(o=>{var i,s;t.edgeMouseLeave(o),(s=(i=e.events)==null?void 0:i.mouseLeave)==null||s.call(i,o)}),n.contextMenu.on(o=>{var i,s;t.edgeContextMenu(o),(s=(i=e.events)==null?void 0:i.contextMenu)==null||s.call(i,o)}),n.updateStart.on(o=>{var i,s;t.edgeUpdateStart(o),(s=(i=e.events)==null?void 0:i.updateStart)==null||s.call(i,o)}),n.update.on(o=>{var i,s;t.edgeUpdate(o),(s=(i=e.events)==null?void 0:i.update)==null||s.call(i,o)}),n.updateEnd.on(o=>{var i,s;t.edgeUpdateEnd(o),(s=(i=e.events)==null?void 0:i.updateEnd)==null||s.call(i,o)}),Object.entries(n).reduce((o,[i,s])=>(o.emit[i]=s.trigger,o.on[i]=s.on,o),{emit:{},on:{}})}function Y2(){const{viewport:e,snapGrid:t,snapToGrid:n,vueFlowRef:o}=Fe();return i=>{var s;const r=((s=o.value)==null?void 0:s.getBoundingClientRect())??{left:0,top:0},l=I2(i)?i.sourceEvent:i,{x:a,y:u}=Bt(l,r),c=Qo({x:a,y:u},e.value),{x:d,y:p}=n.value?Es(c,t.value):c;return{xSnapped:d,ySnapped:p,...c}}}function _i(){return!0}function Rd({handleId:e,nodeId:t,type:n,isValidConnection:o,edgeUpdaterType:i,onEdgeUpdate:s,onEdgeUpdateEnd:r}){const{id:l,vueFlowRef:a,connectionMode:u,connectionRadius:c,connectOnClick:d,connectionClickStartHandle:p,nodesConnectable:h,autoPanOnConnect:b,autoPanSpeed:E,findNode:N,panBy:M,startConnection:P,updateConnection:g,endConnection:_,emits:O,viewport:U,edges:X,nodes:H,isValidConnection:F,nodeLookup:Z}=Fe();let j=null,C=!1,ee=null;function T(k){var L;const $=Ee(n)==="target",D=ll(k),V=$a(k.target);if(D&&k.button===0||!D){let Y=function(q){f=Bt(q,de),ie=O2(Qo(f,U.value,!1,[1,1]),c.value,Z.value,m),v||(y(),v=!0);const K=La(q,{handle:ie,connectionMode:u.value,fromNodeId:Ee(t),fromHandleId:Ee(e),fromType:$?"target":"source",isValidConnection:Q,doc:V,lib:"vue",flowId:l,nodeLookup:Z.value},X.value,H.value,N);ee=K.handleDomNode,j=K.connection,C=V2(!!ie,K.isValid);const ne={...A,isValid:C,to:K.toHandle&&C?Mr({x:K.toHandle.x,y:K.toHandle.y},U.value):f,toHandle:K.toHandle,toPosition:C&&K.toHandle?K.toHandle.position:$r[m.position],toNode:K.toHandle?Z.value.get(K.toHandle.nodeId):null};if(!(C&&ie&&A?.toHandle&&ne.toHandle&&A.toHandle.type===ne.toHandle.type&&A.toHandle.nodeId===ne.toHandle.nodeId&&A.toHandle.id===ne.toHandle.id&&A.to.x===ne.to.x&&A.to.y===ne.to.y)){if(g(ie&&C?Mr({x:ie.x,y:ie.y},U.value):f,K.toHandle,R2(!!ie,C)),A=ne,!ie&&!C&&!ee)return Xs(S);j&&j.source!==j.target&&ee&&(Xs(S),S=ee,ee.classList.add("connecting","vue-flow__handle-connecting"),ee.classList.toggle("valid",!!C),ee.classList.toggle("vue-flow__handle-valid",!!C))}},J=function(q){(ie||ee)&&j&&C&&(s?s(q,j):O.connect(j)),O.connectEnd(q),i&&r?.(q),Xs(S),cancelAnimationFrame(le),_(q),v=!1,C=!1,j=null,ee=null,V.removeEventListener("mousemove",Y),V.removeEventListener("mouseup",J),V.removeEventListener("touchmove",Y),V.removeEventListener("touchend",J)};const ue=N(Ee(t));let Q=Ee(o)||F.value||_i;!Q&&ue&&(Q=($?ue.isValidSourcePos:ue.isValidTargetPos)||_i);let ie,le=0;const{x:me,y:be}=Bt(k),fe=V?.elementFromPoint(me,be),we=kd(Ee(i),fe),de=(L=a.value)==null?void 0:L.getBoundingClientRect();if(!de||!we)return;const w=B2(Ee(t),we,Ee(e),Z.value,u.value);if(!w)return;let S,f=Bt(k,de),v=!1;const y=()=>{if(!b.value)return;const[q,K]=$d(f,de,E.value);M({x:q,y:K}),le=requestAnimationFrame(y)},m={...w,nodeId:Ee(t),type:we,position:w.position},I=Z.value.get(Ee(t)),R={inProgress:!0,isValid:null,from:ho(I,m,ae.Left,!0),fromHandle:m,fromPosition:m.position,fromNode:I,to:f,toHandle:null,toPosition:$r[m.position],toNode:null};P({nodeId:Ee(t),id:Ee(e),type:we,position:fe?.getAttribute("data-handlepos")||ae.Top,...f},{x:me-de.left,y:be-de.top}),O.connectStart({event:k,nodeId:Ee(t),handleId:Ee(e),handleType:we});let A=R;V.addEventListener("mousemove",Y),V.addEventListener("mouseup",J),V.addEventListener("touchmove",Y),V.addEventListener("touchend",J)}}function G(k){var L,$;if(!d.value)return;const D=Ee(n)==="target";if(!p.value){O.clickConnectStart({event:k,nodeId:Ee(t),handleId:Ee(e)}),P({nodeId:Ee(t),type:Ee(n),id:Ee(e),position:ae.Top,...Bt(k)},void 0,!0);return}let V=Ee(o)||F.value||_i;const Y=N(Ee(t));if(!V&&Y&&(V=(D?Y.isValidSourcePos:Y.isValidTargetPos)||_i),Y&&(typeof Y.connectable>"u"?h.value:Y.connectable)===!1)return;const J=$a(k.target),ue=La(k,{handle:{nodeId:Ee(t),id:Ee(e),type:Ee(n),position:ae.Top,...Bt(k)},connectionMode:u.value,fromNodeId:p.value.nodeId,fromHandleId:p.value.id??null,fromType:p.value.type,isValidConnection:V,doc:J,lib:"vue",flowId:l,nodeLookup:Z.value},X.value,H.value,N),Q=((L=ue.connection)==null?void 0:L.source)===(($=ue.connection)==null?void 0:$.target);ue.isValid&&ue.connection&&!Q&&O.connect(ue.connection),O.clickConnectEnd(k),_(k,!0)}return{handlePointerDown:T,handleClick:G}}function K2(){return mt(Ad,"")}function Vd(e){const t=e??K2()??"",n=mt(Dd,te(null)),{findNode:o,edges:i,emits:s}=Fe(),r=o(t);return r||s.error(new Ge(Ue.NODE_NOT_FOUND,t)),{id:t,nodeEl:n,node:r,parentNode:pe(()=>o(r.parentNode)),connectedEdges:pe(()=>Td([r],i.value))}}function X2(){return{doubleClick:re(),click:re(),mouseEnter:re(),mouseMove:re(),mouseLeave:re(),contextMenu:re(),dragStart:re(),drag:re(),dragStop:re()}}function W2(e,t){const n=X2();return n.doubleClick.on(o=>{var i,s;t.nodeDoubleClick(o),(s=(i=e.events)==null?void 0:i.doubleClick)==null||s.call(i,o)}),n.click.on(o=>{var i,s;t.nodeClick(o),(s=(i=e.events)==null?void 0:i.click)==null||s.call(i,o)}),n.mouseEnter.on(o=>{var i,s;t.nodeMouseEnter(o),(s=(i=e.events)==null?void 0:i.mouseEnter)==null||s.call(i,o)}),n.mouseMove.on(o=>{var i,s;t.nodeMouseMove(o),(s=(i=e.events)==null?void 0:i.mouseMove)==null||s.call(i,o)}),n.mouseLeave.on(o=>{var i,s;t.nodeMouseLeave(o),(s=(i=e.events)==null?void 0:i.mouseLeave)==null||s.call(i,o)}),n.contextMenu.on(o=>{var i,s;t.nodeContextMenu(o),(s=(i=e.events)==null?void 0:i.contextMenu)==null||s.call(i,o)}),n.dragStart.on(o=>{var i,s;t.nodeDragStart(o),(s=(i=e.events)==null?void 0:i.dragStart)==null||s.call(i,o)}),n.drag.on(o=>{var i,s;t.nodeDrag(o),(s=(i=e.events)==null?void 0:i.drag)==null||s.call(i,o)}),n.dragStop.on(o=>{var i,s;t.nodeDragStop(o),(s=(i=e.events)==null?void 0:i.dragStop)==null||s.call(i,o)}),Object.entries(n).reduce((o,[i,s])=>(o.emit[i]=s.trigger,o.on[i]=s.on,o),{emit:{},on:{}})}function Bd(){const{getSelectedNodes:e,nodeExtent:t,updateNodePositions:n,findNode:o,snapGrid:i,snapToGrid:s,nodesDraggable:r,emits:l}=Fe();return(a,u=!1)=>{const c=s.value?i.value[0]:5,d=s.value?i.value[1]:5,p=u?4:1,h=a.x*c*p,b=a.y*d*p,E=[];for(const N of e.value)if(N.draggable||r&&typeof N.draggable>"u"){const M={x:N.computedPosition.x+h,y:N.computedPosition.y+b},{computedPosition:P}=rl(N,M,l.error,t.value,N.parentNode?o(N.parentNode):void 0);E.push({id:N.id,position:P,from:N.position,distance:{x:a.x,y:a.y},dimensions:N.dimensions})}n(E,!0,!1)}}const qs=.1,Z2=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2;function vn(){return Ss("Viewport not initialized yet."),Promise.resolve(!1)}const q2={zoomIn:vn,zoomOut:vn,zoomTo:vn,fitView:vn,setCenter:vn,fitBounds:vn,project:e=>e,screenToFlowCoordinate:e=>e,flowToScreenCoordinate:e=>e,setViewport:vn,setTransform:vn,getViewport:()=>({x:0,y:0,zoom:1}),getTransform:()=>({x:0,y:0,zoom:1}),viewportInitialized:!1};function J2(e){function t(o,i){return new Promise(s=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate(i?.interpolate==="linear"?Ro:$i).scaleBy(Js(e.d3Selection,i?.duration,i?.ease,()=>{s(!0)}),o):s(!1)})}function n(o,i,s,r){return new Promise(l=>{var a;const{x:u,y:c}=bd({x:-o,y:-i},e.translateExtent),d=fo.translate(-u,-c).scale(s);e.d3Selection&&e.d3Zoom?(a=e.d3Zoom)==null||a.interpolate(r?.interpolate==="linear"?Ro:$i).transform(Js(e.d3Selection,r?.duration,r?.ease,()=>{l(!0)}),d):l(!1)})}return pe(()=>e.d3Zoom&&e.d3Selection&&e.dimensions.width&&e.dimensions.height?{viewportInitialized:!0,zoomIn:i=>t(1.2,i),zoomOut:i=>t(1/1.2,i),zoomTo:(i,s)=>new Promise(r=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate(s?.interpolate==="linear"?Ro:$i).scaleTo(Js(e.d3Selection,s?.duration,s?.ease,()=>{r(!0)}),i):r(!1)}),setViewport:(i,s)=>n(i.x,i.y,i.zoom,s),setTransform:(i,s)=>n(i.x,i.y,i.zoom,s),getViewport:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),getTransform:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),fitView:(i={padding:qs,includeHiddenNodes:!1,duration:0})=>{var s,r;const l=[];for(const p of e.nodes)p.dimensions.width&&p.dimensions.height&&(i?.includeHiddenNodes||!p.hidden)&&(!((s=i.nodes)!=null&&s.length)||(r=i.nodes)!=null&&r.length&&i.nodes.includes(p.id))&&l.push(p);if(!l.length)return Promise.resolve(!1);const a=Cd(l),{x:u,y:c,zoom:d}=Ia(a,e.dimensions.width,e.dimensions.height,i.minZoom??e.minZoom,i.maxZoom??e.maxZoom,i.padding??qs,i.offset);return n(u,c,d,i)},setCenter:(i,s,r)=>{const l=typeof r?.zoom<"u"?r.zoom:e.maxZoom,a=e.dimensions.width/2-i*l,u=e.dimensions.height/2-s*l;return n(a,u,l,r)},fitBounds:(i,s={padding:qs})=>{const{x:r,y:l,zoom:a}=Ia(i,e.dimensions.width,e.dimensions.height,e.minZoom,e.maxZoom,s.padding);return n(r,l,a,s)},project:i=>Qo(i,e.viewport,e.snapToGrid,e.snapGrid),screenToFlowCoordinate:i=>{if(e.vueFlowRef){const{x:s,y:r}=e.vueFlowRef.getBoundingClientRect(),l={x:i.x-s,y:i.y-r};return Qo(l,e.viewport,e.snapToGrid,e.snapGrid)}return{x:0,y:0}},flowToScreenCoordinate:i=>{if(e.vueFlowRef){const{x:s,y:r}=e.vueFlowRef.getBoundingClientRect(),l={x:i.x+s,y:i.y+r};return Mr(l,e.viewport)}return{x:0,y:0}}}:q2)}function Js(e,t=0,n=Z2,o=()=>{}){const i=typeof t=="number"&&t>0;return i||o(),i?e.transition().duration(t).ease(n).on("end",o):e}function Q2(e,t,n){const o=os(!0);return o.run(()=>{const i=()=>{o.run(()=>{let E,N,M=!!(n.nodes.value.length||n.edges.value.length);E=Zn([e.modelValue,()=>{var P,g;return(g=(P=e.modelValue)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setElements(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.nodes,n.edges,()=>n.edges.value.length,()=>n.nodes.value.length],([P,g])=>{var _;(_=e.modelValue)!=null&&_.value&&Array.isArray(e.modelValue.value)&&(E?.pause(),e.modelValue.value=[...P,...g],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},s=()=>{o.run(()=>{let E,N,M=!!n.nodes.value.length;E=Zn([e.nodes,()=>{var P,g;return(g=(P=e.nodes)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setNodes(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.nodes,()=>n.nodes.value.length],([P])=>{var g;(g=e.nodes)!=null&&g.value&&Array.isArray(e.nodes.value)&&(E?.pause(),e.nodes.value=[...P],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},r=()=>{o.run(()=>{let E,N,M=!!n.edges.value.length;E=Zn([e.edges,()=>{var P,g;return(g=(P=e.edges)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setEdges(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.edges,()=>n.edges.value.length],([P])=>{var g;(g=e.edges)!=null&&g.value&&Array.isArray(e.edges.value)&&(E?.pause(),e.edges.value=[...P],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},l=()=>{o.run(()=>{xe(()=>t.maxZoom,()=>{t.maxZoom&&He(t.maxZoom)&&n.setMaxZoom(t.maxZoom)},{immediate:!0})})},a=()=>{o.run(()=>{xe(()=>t.minZoom,()=>{t.minZoom&&He(t.minZoom)&&n.setMinZoom(t.minZoom)},{immediate:!0})})},u=()=>{o.run(()=>{xe(()=>t.translateExtent,()=>{t.translateExtent&&He(t.translateExtent)&&n.setTranslateExtent(t.translateExtent)},{immediate:!0})})},c=()=>{o.run(()=>{xe(()=>t.nodeExtent,()=>{t.nodeExtent&&He(t.nodeExtent)&&n.setNodeExtent(t.nodeExtent)},{immediate:!0})})},d=()=>{o.run(()=>{xe(()=>t.applyDefault,()=>{He(t.applyDefault)&&(n.applyDefault.value=t.applyDefault)},{immediate:!0})})},p=()=>{o.run(()=>{const E=async N=>{let M=N;typeof t.autoConnect=="function"&&(M=await t.autoConnect(N)),M!==!1&&n.addEdges([M])};xe(()=>t.autoConnect,()=>{He(t.autoConnect)&&(n.autoConnect.value=t.autoConnect)},{immediate:!0}),xe(n.autoConnect,(N,M,P)=>{N?n.onConnect(E):n.hooks.value.connect.off(E),P(()=>{n.hooks.value.connect.off(E)})},{immediate:!0})})},h=()=>{const E=["id","modelValue","translateExtent","nodeExtent","edges","nodes","maxZoom","minZoom","applyDefault","autoConnect"];for(const N of Object.keys(t)){const M=N;if(!E.includes(M)){const P=Ve(()=>t[M]),g=n[M];Oe(g)&&o.run(()=>{xe(P,_=>{He(_)&&(g.value=_)},{immediate:!0})})}}};(()=>{i(),s(),r(),a(),l(),u(),c(),d(),p(),h()})()}),()=>o.stop()}function e_(){return{edgesChange:re(),nodesChange:re(),nodeDoubleClick:re(),nodeClick:re(),nodeMouseEnter:re(),nodeMouseMove:re(),nodeMouseLeave:re(),nodeContextMenu:re(),nodeDragStart:re(),nodeDrag:re(),nodeDragStop:re(),nodesInitialized:re(),miniMapNodeClick:re(),miniMapNodeDoubleClick:re(),miniMapNodeMouseEnter:re(),miniMapNodeMouseMove:re(),miniMapNodeMouseLeave:re(),connect:re(),connectStart:re(),connectEnd:re(),clickConnectStart:re(),clickConnectEnd:re(),paneReady:re(),init:re(),move:re(),moveStart:re(),moveEnd:re(),selectionDragStart:re(),selectionDrag:re(),selectionDragStop:re(),selectionContextMenu:re(),selectionStart:re(),selectionEnd:re(),viewportChangeStart:re(),viewportChange:re(),viewportChangeEnd:re(),paneScroll:re(),paneClick:re(),paneContextMenu:re(),paneMouseEnter:re(),paneMouseMove:re(),paneMouseLeave:re(),edgeContextMenu:re(),edgeMouseEnter:re(),edgeMouseMove:re(),edgeMouseLeave:re(),edgeDoubleClick:re(),edgeClick:re(),edgeUpdateStart:re(),edgeUpdate:re(),edgeUpdateEnd:re(),updateNodeInternals:re(),error:re(e=>Ss(e.message))}}function t_(e,t){Au(()=>{for(const[n,o]of Object.entries(t.value)){const i=s=>{e(n,s)};o.fns.add(i),ms(()=>{o.off(i)})}})}function Ld(){return{vueFlowRef:null,viewportRef:null,nodes:[],edges:[],connectionLookup:new Map,nodeTypes:{},edgeTypes:{},initialized:!1,dimensions:{width:0,height:0},viewport:{x:0,y:0,zoom:1},d3Zoom:null,d3Selection:null,d3ZoomHandler:null,minZoom:.5,maxZoom:2,translateExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],nodeExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],selectionMode:sl.Full,paneDragging:!1,preventScrolling:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!0,panOnScroll:!1,panOnScrollSpeed:.5,panOnScrollMode:Vo.Free,paneClickDistance:0,panOnDrag:!0,edgeUpdaterRadius:10,onlyRenderVisibleElements:!1,defaultViewport:{x:0,y:0,zoom:1},nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,defaultMarkerColor:"#b1b1b7",connectionLineStyle:{},connectionLineType:null,connectionLineOptions:{type:An.Bezier,style:{}},connectionMode:Cn.Loose,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectionPosition:{x:Number.NaN,y:Number.NaN},connectionRadius:20,connectOnClick:!0,connectionStatus:null,isValidConnection:null,snapGrid:[15,15],snapToGrid:!1,edgesUpdatable:!1,edgesFocusable:!0,nodesFocusable:!0,nodesConnectable:!0,nodesDraggable:!0,nodeDragThreshold:1,elementsSelectable:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,selectionKeyCode:"Shift",multiSelectionKeyCode:qi()?"Meta":"Control",zoomActivationKeyCode:qi()?"Meta":"Control",deleteKeyCode:"Backspace",panActivationKeyCode:"Space",hooks:e_(),applyDefault:!0,autoConnect:!1,fitViewOnInit:!1,fitViewOnInitDone:!1,noDragClassName:"nodrag",noWheelClassName:"nowheel",noPanClassName:"nopan",defaultEdgeOptions:void 0,elevateEdgesOnSelect:!1,elevateNodesOnSelect:!0,autoPanOnNodeDrag:!0,autoPanOnConnect:!0,autoPanSpeed:15,disableKeyboardA11y:!1,ariaLiveMessage:""}}const n_=["id","vueFlowRef","viewportRef","initialized","modelValue","nodes","edges","maxZoom","minZoom","translateExtent","hooks","defaultEdgeOptions"];function o_(e,t,n){const o=J2(e),i=f=>{const v=f??[];e.hooks.updateNodeInternals.trigger(v)},s=f=>_2(f,e.nodes,e.edges),r=f=>y2(f,e.nodes,e.edges),l=f=>Td(f,e.edges),a=({id:f,type:v,nodeId:y})=>{var m;return Array.from(((m=e.connectionLookup.get(`${y}-${v}-${f??null}`))==null?void 0:m.values())??[])},u=f=>{if(f)return t.value.get(f)},c=f=>{if(f)return n.value.get(f)},d=(f,v,y)=>{var m,I;const B=[];for(const R of f){const A={id:R.id,type:"position",dragging:y,from:R.from};if(v&&(A.position=R.position,R.parentNode)){const q=u(R.parentNode);A.position={x:A.position.x-(((m=q?.computedPosition)==null?void 0:m.x)??0),y:A.position.y-(((I=q?.computedPosition)==null?void 0:I.y)??0)}}B.push(A)}B?.length&&e.hooks.nodesChange.trigger(B)},p=f=>{if(!e.vueFlowRef)return;const v=e.vueFlowRef.querySelector(".vue-flow__transformationpane");if(!v)return;const y=window.getComputedStyle(v),{m22:m}=new window.DOMMatrixReadOnly(y.transform),I=[];for(const B of f){const R=B,A=u(R.id);if(A){const q=xs(R.nodeElement);if(!!(q.width&&q.height&&(A.dimensions.width!==q.width||A.dimensions.height!==q.height||R.forceUpdate))){const ne=R.nodeElement.getBoundingClientRect();A.dimensions=q,A.handleBounds.source=Fa("source",R.nodeElement,ne,m,A.id),A.handleBounds.target=Fa("target",R.nodeElement,ne,m,A.id),I.push({id:A.id,type:"dimensions",dimensions:q})}}}!e.fitViewOnInitDone&&e.fitViewOnInit&&o.value.fitView().then(()=>{e.fitViewOnInitDone=!0}),I.length&&e.hooks.nodesChange.trigger(I)},h=(f,v)=>{const y=new Set,m=new Set;for(const R of f)zn(R)?y.add(R.id):Nn(R)&&m.add(R.id);const I=xn(t.value,y,!0),B=xn(n.value,m);if(e.multiSelectionActive){for(const R of y)I.push(_n(R,v));for(const R of m)B.push(_n(R,v))}I.length&&e.hooks.nodesChange.trigger(I),B.length&&e.hooks.edgesChange.trigger(B)},b=f=>{if(e.multiSelectionActive){const v=f.map(y=>_n(y.id,!0));e.hooks.nodesChange.trigger(v);return}e.hooks.nodesChange.trigger(xn(t.value,new Set(f.map(v=>v.id)),!0)),e.hooks.edgesChange.trigger(xn(n.value))},E=f=>{if(e.multiSelectionActive){const v=f.map(y=>_n(y.id,!0));e.hooks.edgesChange.trigger(v);return}e.hooks.edgesChange.trigger(xn(n.value,new Set(f.map(v=>v.id)))),e.hooks.nodesChange.trigger(xn(t.value,new Set,!0))},N=f=>{h(f,!0)},M=f=>{const y=(f||e.nodes).map(m=>(m.selected=!1,_n(m.id,!1)));e.hooks.nodesChange.trigger(y)},P=f=>{const y=(f||e.edges).map(m=>(m.selected=!1,_n(m.id,!1)));e.hooks.edgesChange.trigger(y)},g=f=>{if(!f||!f.length)return h([],!1);const v=f.reduce((y,m)=>{const I=_n(m.id,!1);return zn(m)?y.nodes.push(I):y.edges.push(I),y},{nodes:[],edges:[]});v.nodes.length&&e.hooks.nodesChange.trigger(v.nodes),v.edges.length&&e.hooks.edgesChange.trigger(v.edges)},_=f=>{var v;(v=e.d3Zoom)==null||v.scaleExtent([f,e.maxZoom]),e.minZoom=f},O=f=>{var v;(v=e.d3Zoom)==null||v.scaleExtent([e.minZoom,f]),e.maxZoom=f},U=f=>{var v;(v=e.d3Zoom)==null||v.translateExtent(f),e.translateExtent=f},X=f=>{e.nodeExtent=f,i()},H=f=>{var v;(v=e.d3Zoom)==null||v.clickDistance(f)},F=f=>{e.nodesDraggable=f,e.nodesConnectable=f,e.elementsSelectable=f},Z=f=>{const v=f instanceof Function?f(e.nodes):f;!e.initialized&&!v.length||(e.nodes=za(v,u,e.hooks.error.trigger))},j=f=>{const v=f instanceof Function?f(e.edges):f;if(!e.initialized&&!v.length)return;const y=Zs(v,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);Ws(e.connectionLookup,n.value,y),e.edges=y},C=f=>{const v=f instanceof Function?f([...e.nodes,...e.edges]):f;!e.initialized&&!v.length||(Z(v.filter(zn)),j(v.filter(Nn)))},ee=f=>{let v=f instanceof Function?f(e.nodes):f;v=Array.isArray(v)?v:[v];const y=za(v,u,e.hooks.error.trigger),m=[];for(const I of y)m.push(Aa(I));m.length&&e.hooks.nodesChange.trigger(m)},T=f=>{let v=f instanceof Function?f(e.edges):f;v=Array.isArray(v)?v:[v];const y=Zs(v,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges),m=[];for(const I of y)m.push(Aa(I));m.length&&e.hooks.edgesChange.trigger(m)},G=(f,v=!0,y=!1)=>{const m=f instanceof Function?f(e.nodes):f,I=Array.isArray(m)?m:[m],B=[],R=[];function A(K){const ne=l(K);for(const se of ne)(!He(se.deletable)||se.deletable)&&R.push(Oa(se.id,se.source,se.target,se.sourceHandle,se.targetHandle))}function q(K){const ne=[];for(const se of e.nodes)se.parentNode===K&&ne.push(se);if(ne.length){for(const se of ne)B.push(Da(se.id));v&&A(ne);for(const se of ne)q(se.id)}}for(const K of I){const ne=typeof K=="string"?u(K):K;ne&&(He(ne.deletable)&&!ne.deletable||(B.push(Da(ne.id)),v&&A([ne]),y&&q(ne.id)))}R.length&&e.hooks.edgesChange.trigger(R),B.length&&e.hooks.nodesChange.trigger(B)},k=f=>{const v=f instanceof Function?f(e.edges):f,y=Array.isArray(v)?v:[v],m=[];for(const I of y){const B=typeof I=="string"?c(I):I;B&&(He(B.deletable)&&!B.deletable||m.push(Oa(typeof I=="string"?I:I.id,B.source,B.target,B.sourceHandle,B.targetHandle)))}e.hooks.edgesChange.trigger(m)},L=(f,v,y=!0)=>{const m=c(f.id);if(!m)return!1;const I=e.edges.indexOf(m),B=z2(f,v,m,y,e.hooks.error.trigger);if(B){const[R]=Zs([B],e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);return e.edges=e.edges.map((A,q)=>q===I?R:A),Ws(e.connectionLookup,n.value,[R]),R}return!1},$=(f,v,y={replace:!1})=>{const m=c(f);if(!m)return;const I=typeof v=="function"?v(m):v;m.data=y.replace?I:{...m.data,...I}},D=f=>Pa(f,e.nodes),V=f=>{const v=Pa(f,e.edges);return Ws(e.connectionLookup,n.value,v),v},Y=(f,v,y={replace:!1})=>{const m=u(f);if(!m)return;const I=typeof v=="function"?v(m):v;y.replace?e.nodes.splice(e.nodes.indexOf(m),1,I):Object.assign(m,I)},J=(f,v,y={replace:!1})=>{const m=u(f);if(!m)return;const I=typeof v=="function"?v(m):v;m.data=y.replace?I:{...m.data,...I}},ue=(f,v,y=!1)=>{y?e.connectionClickStartHandle=f:e.connectionStartHandle=f,e.connectionEndHandle=null,e.connectionStatus=null,v&&(e.connectionPosition=v)},Q=(f,v=null,y=null)=>{e.connectionStartHandle&&(e.connectionPosition=f,e.connectionEndHandle=v,e.connectionStatus=y)},ie=(f,v)=>{e.connectionPosition={x:Number.NaN,y:Number.NaN},e.connectionEndHandle=null,e.connectionStatus=null,v?e.connectionClickStartHandle=null:e.connectionStartHandle=null},le=f=>{const v=v2(f),y=v?null:Co(f)?f:u(f.id);return!v&&!y?[null,null,v]:[v?f:Wi(y),y,v]},me=(f,v=!0,y=e.nodes)=>{const[m,I,B]=le(f);if(!m)return[];const R=[];for(const A of y||e.nodes){if(!B&&(A.id===I.id||!A.computedPosition))continue;const q=Wi(A),K=Zi(q,m);(v&&K>0||K>=Number(m.width)*Number(m.height))&&R.push(A)}return R},be=(f,v,y=!0)=>{const[m]=le(f);if(!m)return!1;const I=Zi(m,v);return y&&I>0||I>=Number(m.width)*Number(m.height)},fe=f=>{const{viewport:v,dimensions:y,d3Zoom:m,d3Selection:I,translateExtent:B}=e;if(!m||!I||!f.x&&!f.y)return!1;const R=fo.translate(v.x+f.x,v.y+f.y).scale(v.zoom),A=[[0,0],[y.width,y.height]],q=m.constrain()(R,A,B),K=e.viewport.x!==q.x||e.viewport.y!==q.y||e.viewport.zoom!==q.k;return m.transform(I,q),K},we=f=>{const v=f instanceof Function?f(e):f,y=["d3Zoom","d3Selection","d3ZoomHandler","viewportRef","vueFlowRef","dimensions","hooks"];He(v.defaultEdgeOptions)&&(e.defaultEdgeOptions=v.defaultEdgeOptions);const m=v.modelValue||v.nodes||v.edges?[]:void 0;m&&(v.modelValue&&m.push(...v.modelValue),v.nodes&&m.push(...v.nodes),v.edges&&m.push(...v.edges),C(m));const I=()=>{He(v.maxZoom)&&O(v.maxZoom),He(v.minZoom)&&_(v.minZoom),He(v.translateExtent)&&U(v.translateExtent)};for(const B of Object.keys(v)){const R=B,A=v[R];![...n_,...y].includes(R)&&He(A)&&(e[R]=A)}mr(()=>e.d3Zoom).not.toBeNull().then(I),e.initialized||(e.initialized=!0)};return{updateNodePositions:d,updateNodeDimensions:p,setElements:C,setNodes:Z,setEdges:j,addNodes:ee,addEdges:T,removeNodes:G,removeEdges:k,findNode:u,findEdge:c,updateEdge:L,updateEdgeData:$,updateNode:Y,updateNodeData:J,applyEdgeChanges:V,applyNodeChanges:D,addSelectedElements:N,addSelectedNodes:b,addSelectedEdges:E,setMinZoom:_,setMaxZoom:O,setTranslateExtent:U,setNodeExtent:X,setPaneClickDistance:H,removeSelectedElements:g,removeSelectedNodes:M,removeSelectedEdges:P,startConnection:ue,updateConnection:Q,endConnection:ie,setInteractive:F,setState:we,getIntersectingNodes:me,getIncomers:s,getOutgoers:r,getConnectedEdges:l,getHandleConnections:a,isNodeIntersecting:be,panBy:fe,fitView:f=>o.value.fitView(f),zoomIn:f=>o.value.zoomIn(f),zoomOut:f=>o.value.zoomOut(f),zoomTo:(f,v)=>o.value.zoomTo(f,v),setViewport:(f,v)=>o.value.setViewport(f,v),setTransform:(f,v)=>o.value.setTransform(f,v),getViewport:()=>o.value.getViewport(),getTransform:()=>o.value.getTransform(),setCenter:(f,v,y)=>o.value.setCenter(f,v,y),fitBounds:(f,v)=>o.value.fitBounds(f,v),project:f=>o.value.project(f),screenToFlowCoordinate:f=>o.value.screenToFlowCoordinate(f),flowToScreenCoordinate:f=>o.value.flowToScreenCoordinate(f),toObject:()=>{const f=[],v=[];for(const y of e.nodes){const{computedPosition:m,handleBounds:I,selected:B,dimensions:R,isParent:A,resizing:q,dragging:K,events:ne,...se}=y;f.push(se)}for(const y of e.edges){const{selected:m,sourceNode:I,targetNode:B,events:R,...A}=y;v.push(A)}return JSON.parse(JSON.stringify({nodes:f,edges:v,position:[e.viewport.x,e.viewport.y],zoom:e.viewport.zoom,viewport:e.viewport}))},fromObject:f=>new Promise(v=>{const{nodes:y,edges:m,position:I,zoom:B,viewport:R}=f;if(y&&Z(y),m&&j(m),R?.x&&R?.y||I){const A=R?.x||I[0],q=R?.y||I[1],K=R?.zoom||B||e.viewport.zoom;return mr(()=>o.value.viewportInitialized).toBe(!0).then(()=>{o.value.setViewport({x:A,y:q,zoom:K}).then(()=>{v(!0)})})}else v(!0)}),updateNodeInternals:i,viewportHelper:o,$reset:()=>{const f=Ld();if(e.edges=[],e.nodes=[],e.d3Zoom&&e.d3Selection){const v=fo.translate(f.defaultViewport.x??0,f.defaultViewport.y??0).scale(Yn(f.defaultViewport.zoom??1,f.minZoom,f.maxZoom)),y=e.viewportRef.getBoundingClientRect(),m=[[0,0],[y.width,y.height]],I=e.d3Zoom.constrain()(v,m,f.translateExtent);e.d3Zoom.transform(e.d3Selection,I)}we(f)},$destroy:()=>{}}}const i_=["data-id","data-handleid","data-nodeid","data-handlepos"],s_={name:"Handle",compatConfig:{MODE:3}},Ji=he({...s_,props:{id:{default:null},type:{},position:{default:()=>ae.Top},isValidConnection:{type:Function},connectable:{type:[Boolean,Number,String,Function],default:void 0},connectableStart:{type:Boolean,default:!0},connectableEnd:{type:Boolean,default:!0}},setup(e,{expose:t}){const n=ih(e,["position","connectable","connectableStart","connectableEnd","id"]),o=Ve(()=>n.type??"source"),i=Ve(()=>n.isValidConnection??null),{id:s,connectionStartHandle:r,connectionClickStartHandle:l,connectionEndHandle:a,vueFlowRef:u,nodesConnectable:c,noDragClassName:d,noPanClassName:p}=Fe(),{id:h,node:b,nodeEl:E,connectedEdges:N}=Vd(),M=te(),P=Ve(()=>typeof e.connectableStart<"u"?e.connectableStart:!0),g=Ve(()=>typeof e.connectableEnd<"u"?e.connectableEnd:!0),_=Ve(()=>{var j,C,ee,T,G,k;return((j=r.value)==null?void 0:j.nodeId)===h&&((C=r.value)==null?void 0:C.id)===e.id&&((ee=r.value)==null?void 0:ee.type)===o.value||((T=a.value)==null?void 0:T.nodeId)===h&&((G=a.value)==null?void 0:G.id)===e.id&&((k=a.value)==null?void 0:k.type)===o.value}),O=Ve(()=>{var j,C,ee;return((j=l.value)==null?void 0:j.nodeId)===h&&((C=l.value)==null?void 0:C.id)===e.id&&((ee=l.value)==null?void 0:ee.type)===o.value}),{handlePointerDown:U,handleClick:X}=Rd({nodeId:h,handleId:e.id,isValidConnection:i,type:o}),H=pe(()=>typeof e.connectable=="string"&&e.connectable==="single"?!N.value.some(j=>{const C=j[`${o.value}Handle`];return j[o.value]!==h?!1:C?C===e.id:!0}):typeof e.connectable=="number"?N.value.filter(j=>{const C=j[`${o.value}Handle`];return j[o.value]!==h?!1:C?C===e.id:!0}).length{var j;if(!b.dimensions.width||!b.dimensions.height)return;const C=(j=b.handleBounds[o.value])==null?void 0:j.find(D=>D.id===e.id);if(!u.value||C)return;const ee=u.value.querySelector(".vue-flow__transformationpane");if(!E.value||!M.value||!ee||!e.id)return;const T=E.value.getBoundingClientRect(),G=M.value.getBoundingClientRect(),k=window.getComputedStyle(ee),{m22:L}=new window.DOMMatrixReadOnly(k.transform),$={id:e.id,position:e.position,x:(G.left-T.left)/L,y:(G.top-T.top)/L,type:o.value,nodeId:h,...xs(M.value)};b.handleBounds[o.value]=[...b.handleBounds[o.value]??[],$]});function F(j){const C=ll(j);H.value&&P.value&&(C&&j.button===0||!C)&&U(j)}function Z(j){!h||!l.value&&!P.value||H.value&&X(j)}return t({handleClick:X,handlePointerDown:U,onClick:Z,onPointerDown:F}),(j,C)=>(z(),W("div",{ref_key:"handle",ref:M,"data-id":`${oe(s)}-${oe(h)}-${e.id}-${o.value}`,"data-handleid":e.id,"data-nodeid":oe(h),"data-handlepos":j.position,class:ze(["vue-flow__handle",[`vue-flow__handle-${j.position}`,`vue-flow__handle-${e.id}`,oe(d),oe(p),o.value,{connectable:H.value,connecting:O.value,connectablestart:P.value,connectableend:g.value,connectionindicator:H.value&&(P.value&&!_.value||g.value&&_.value)}]]),onMousedown:F,onTouchstartPassive:F,onClick:Z},[Ct(j.$slots,"default",{id:j.id})],42,i_))}}),Ns=function({sourcePosition:e=ae.Bottom,targetPosition:t=ae.Top,label:n,connectable:o=!0,isValidTargetPos:i,isValidSourcePos:s,data:r}){const l=r.label??n;return[Ie(Ji,{type:"target",position:t,connectable:o,isValidConnection:i}),typeof l!="string"&&l?Ie(l):Ie(_e,[l]),Ie(Ji,{type:"source",position:e,connectable:o,isValidConnection:s})]};Ns.props=["sourcePosition","targetPosition","label","isValidTargetPos","isValidSourcePos","connectable","data"];Ns.inheritAttrs=!1;Ns.compatConfig={MODE:3};const r_=Ns,Ts=function({targetPosition:e=ae.Top,label:t,connectable:n=!0,isValidTargetPos:o,data:i}){const s=i.label??t;return[Ie(Ji,{type:"target",position:e,connectable:n,isValidConnection:o}),typeof s!="string"&&s?Ie(s):Ie(_e,[s])]};Ts.props=["targetPosition","label","isValidTargetPos","connectable","data"];Ts.inheritAttrs=!1;Ts.compatConfig={MODE:3};const l_=Ts,Ms=function({sourcePosition:e=ae.Bottom,label:t,connectable:n=!0,isValidSourcePos:o,data:i}){const s=i.label??t;return[typeof s!="string"&&s?Ie(s):Ie(_e,[s]),Ie(Ji,{type:"source",position:e,connectable:n,isValidConnection:o})]};Ms.props=["sourcePosition","label","isValidSourcePos","connectable","data"];Ms.inheritAttrs=!1;Ms.compatConfig={MODE:3};const a_=Ms,u_=["transform"],c_=["width","height","x","y","rx","ry"],d_=["y"],f_={name:"EdgeText",compatConfig:{MODE:3}},h_=he({...f_,props:{x:{},y:{},label:{},labelStyle:{default:()=>({})},labelShowBg:{type:Boolean,default:!0},labelBgStyle:{default:()=>({})},labelBgPadding:{default:()=>[2,4]},labelBgBorderRadius:{default:2}},setup(e){const t=te({x:0,y:0,width:0,height:0}),n=te(null),o=pe(()=>`translate(${e.x-t.value.width/2} ${e.y-t.value.height/2})`);ut(i),xe([()=>e.x,()=>e.y,n,()=>e.label],i);function i(){if(!n.value)return;const s=n.value.getBBox();(s.width!==t.value.width||s.height!==t.value.height)&&(t.value=s)}return(s,r)=>(z(),W("g",{transform:o.value,class:"vue-flow__edge-textwrapper"},[s.labelShowBg?(z(),W("rect",{key:0,class:"vue-flow__edge-textbg",width:`${t.value.width+2*s.labelBgPadding[0]}px`,height:`${t.value.height+2*s.labelBgPadding[1]}px`,x:-s.labelBgPadding[0],y:-s.labelBgPadding[1],style:at(s.labelBgStyle),rx:s.labelBgBorderRadius,ry:s.labelBgBorderRadius},null,12,c_)):Ne("",!0),x("text",Mn(s.$attrs,{ref_key:"el",ref:n,class:"vue-flow__edge-text",y:t.value.height/2,dy:"0.3em",style:s.labelStyle}),[Ct(s.$slots,"default",{},()=>[typeof s.label!="string"?(z(),Re(vo(s.label),{key:0})):(z(),W(_e,{key:1},[Be(Ae(s.label),1)],64))])],16,d_)],8,u_))}}),p_=["id","d","marker-end","marker-start"],g_=["d","stroke-width"],v_={name:"BaseEdge",inheritAttrs:!1,compatConfig:{MODE:3}},$s=he({...v_,props:{id:{},labelX:{},labelY:{},path:{},label:{},markerStart:{},markerEnd:{},interactionWidth:{default:20},labelStyle:{},labelShowBg:{type:Boolean},labelBgStyle:{},labelBgPadding:{},labelBgBorderRadius:{}},setup(e,{expose:t}){const n=te(null),o=te(null),i=te(null),s=oh();return t({pathEl:n,interactionEl:o,labelEl:i}),(r,l)=>(z(),W(_e,null,[x("path",Mn(oe(s),{id:r.id,ref_key:"pathEl",ref:n,d:r.path,class:"vue-flow__edge-path","marker-end":r.markerEnd,"marker-start":r.markerStart}),null,16,p_),r.interactionWidth?(z(),W("path",{key:0,ref_key:"interactionEl",ref:o,fill:"none",d:r.path,"stroke-width":r.interactionWidth,"stroke-opacity":0,class:"vue-flow__edge-interaction"},null,8,g_)):Ne("",!0),r.label&&r.labelX&&r.labelY?(z(),Re(h_,{key:1,ref_key:"labelEl",ref:i,x:r.labelX,y:r.labelY,label:r.label,"label-show-bg":r.labelShowBg,"label-bg-style":r.labelBgStyle,"label-bg-padding":r.labelBgPadding,"label-bg-border-radius":r.labelBgBorderRadius,"label-style":r.labelStyle},null,8,["x","y","label","label-show-bg","label-bg-style","label-bg-padding","label-bg-border-radius","label-style"])):Ne("",!0)],64))}});function Fd({sourceX:e,sourceY:t,targetX:n,targetY:o}){const i=Math.abs(n-e)/2,s=n=0?.5*e:t*25*Math.sqrt(-e)}function ja({pos:e,x1:t,y1:n,x2:o,y2:i,c:s}){let r,l;switch(e){case ae.Left:r=t-bi(t-o,s),l=n;break;case ae.Right:r=t+bi(o-t,s),l=n;break;case ae.Top:r=t,l=n-bi(n-i,s);break;case ae.Bottom:r=t,l=n+bi(i-n,s);break}return[r,l]}function Hd(e){const{sourceX:t,sourceY:n,sourcePosition:o=ae.Bottom,targetX:i,targetY:s,targetPosition:r=ae.Top,curvature:l=.25}=e,[a,u]=ja({pos:o,x1:t,y1:n,x2:i,y2:s,c:l}),[c,d]=ja({pos:r,x1:i,y1:s,x2:t,y2:n,c:l}),[p,h,b,E]=zd({sourceX:t,sourceY:n,targetX:i,targetY:s,sourceControlX:a,sourceControlY:u,targetControlX:c,targetControlY:d});return[`M${t},${n} C${a},${u} ${c},${d} ${i},${s}`,p,h,b,E]}function Ya({pos:e,x1:t,y1:n,x2:o,y2:i}){let s,r;switch(e){case ae.Left:case ae.Right:s=.5*(t+o),r=n;break;case ae.Top:case ae.Bottom:s=t,r=.5*(n+i);break}return[s,r]}function Ud(e){const{sourceX:t,sourceY:n,sourcePosition:o=ae.Bottom,targetX:i,targetY:s,targetPosition:r=ae.Top}=e,[l,a]=Ya({pos:o,x1:t,y1:n,x2:i,y2:s}),[u,c]=Ya({pos:r,x1:i,y1:s,x2:t,y2:n}),[d,p,h,b]=zd({sourceX:t,sourceY:n,targetX:i,targetY:s,sourceControlX:l,sourceControlY:a,targetControlX:u,targetControlY:c});return[`M${t},${n} C${l},${a} ${u},${c} ${i},${s}`,d,p,h,b]}const Ka={[ae.Left]:{x:-1,y:0},[ae.Right]:{x:1,y:0},[ae.Top]:{x:0,y:-1},[ae.Bottom]:{x:0,y:1}};function m_({source:e,sourcePosition:t=ae.Bottom,target:n}){return t===ae.Left||t===ae.Right?e.xe[d]?-1:1)*T:M[d]=(u[d]>n[d]?-1:1)*T}}if(t!==o){const ee=d==="x"?"y":"x",T=r[d]===l[ee],G=a[ee]>u[ee],k=a[ee]=C?(b=(F.x+Z.x)/2,E=h[0].y):(b=h[0].x,E=(F.y+Z.y)/2)}return[[e,{x:a.x+N.x,y:a.y+N.y},...h,{x:u.x+M.x,y:u.y+M.y},n],b,E,_,O]}function __(e,t,n,o){const i=Math.min(Xa(e,t)/2,Xa(t,n)/2,o),{x:s,y:r}=t;if(e.x===s&&s===n.x||e.y===r&&r===n.y)return`L${s} ${r}`;if(e.y===r){const u=e.x{let _;return g>0&&g{const[n,o,i]=b_(e);return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),x_=w_,E_=he({name:"SmoothStepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","borderRadius","markerEnd","markerStart","interactionWidth","offset"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=kr({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),Gd=E_,S_=he({name:"StepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],setup(e,{attrs:t}){return()=>Ie(Gd,{...e,...t,borderRadius:0})}}),C_=S_,N_=he({name:"BezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","curvature","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=Hd({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),T_=N_,M_=he({name:"SimpleBezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=Ud({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),$_=M_,I_={input:a_,default:r_,output:l_},k_={default:T_,straight:x_,step:C_,smoothstep:Gd,simplebezier:$_};function P_(e,t,n){const o=pe(()=>E=>t.value.get(E)),i=pe(()=>E=>n.value.get(E)),s=pe(()=>{const E={...k_,...e.edgeTypes},N=Object.keys(E);for(const M of e.edges)M.type&&!N.includes(M.type)&&(E[M.type]=M.type);return E}),r=pe(()=>{const E={...I_,...e.nodeTypes},N=Object.keys(E);for(const M of e.nodes)M.type&&!N.includes(M.type)&&(E[M.type]=M.type);return E}),l=pe(()=>e.onlyRenderVisibleElements?Nd(e.nodes,{x:0,y:0,width:e.dimensions.width,height:e.dimensions.height},e.viewport,!0):e.nodes),a=pe(()=>{if(e.onlyRenderVisibleElements){const E=[];for(const N of e.edges){const M=t.value.get(N.source),P=t.value.get(N.target);M2({sourcePos:M.computedPosition||{x:0,y:0},targetPos:P.computedPosition||{x:0,y:0},sourceWidth:M.dimensions.width,sourceHeight:M.dimensions.height,targetWidth:P.dimensions.width,targetHeight:P.dimensions.height,width:e.dimensions.width,height:e.dimensions.height,viewport:e.viewport})&&E.push(N)}return E}return e.edges}),u=pe(()=>[...l.value,...a.value]),c=pe(()=>{const E=[];for(const N of e.nodes)N.selected&&E.push(N);return E}),d=pe(()=>{const E=[];for(const N of e.edges)N.selected&&E.push(N);return E}),p=pe(()=>[...c.value,...d.value]),h=pe(()=>{const E=[];for(const N of e.nodes)N.dimensions.width&&N.dimensions.height&&N.handleBounds!==void 0&&E.push(N);return E}),b=pe(()=>l.value.length>0&&h.value.length===l.value.length);return{getNode:o,getEdge:i,getElements:u,getEdgeTypes:s,getNodeTypes:r,getEdges:a,getNodes:l,getSelectedElements:p,getSelectedNodes:c,getSelectedEdges:d,getNodesInitialized:h,areNodesInitialized:b}}class Dn{constructor(){this.currentId=0,this.flows=new Map}static getInstance(){var t;const n=(t=Xt())==null?void 0:t.appContext.app,o=n?.config.globalProperties.$vueFlowStorage??Dn.instance;return Dn.instance=o??new Dn,n&&(n.config.globalProperties.$vueFlowStorage=Dn.instance),Dn.instance}set(t,n){return this.flows.set(t,n)}get(t){return this.flows.get(t)}remove(t){return this.flows.delete(t)}create(t,n){const o=Ld(),i=go(o),s={};for(const[p,h]of Object.entries(i.hooks)){const b=`on${p.charAt(0).toUpperCase()+p.slice(1)}`;s[b]=h.on}const r={};for(const[p,h]of Object.entries(i.hooks))r[p]=h.trigger;const l=pe(()=>{const p=new Map;for(const h of i.nodes)p.set(h.id,h);return p}),a=pe(()=>{const p=new Map;for(const h of i.edges)p.set(h.id,h);return p}),u=P_(i,l,a),c=o_(i,l,a);c.setState({...i,...n});const d={...s,...u,...c,...Cm(i),nodeLookup:l,edgeLookup:a,emits:r,id:t,vueFlowVersion:"1.45.0",$destroy:()=>{this.remove(t)}};return this.set(t,d),d}getId(){return`vue-flow-${this.currentId++}`}}function Fe(e){const t=Dn.getInstance(),n=is(),o=typeof e=="object",i=o?e:{id:e},s=i.id,r=s??n?.vueFlowId;let l;if(n){const a=mt(Ga,null);typeof a<"u"&&a!==null&&(!r||a.id===r)&&(l=a)}if(l||r&&(l=t.get(r)),!l||r&&l.id!==r){const a=s??t.getId(),u=t.create(a,i);l=u,(n??os(!0)).run(()=>{xe(u.applyDefault,(d,p,h)=>{const b=N=>{u.applyNodeChanges(N)},E=N=>{u.applyEdgeChanges(N)};d?(u.onNodesChange(b),u.onEdgesChange(E)):(u.hooks.value.nodesChange.off(b),u.hooks.value.edgesChange.off(E)),h(()=>{u.hooks.value.nodesChange.off(b),u.hooks.value.edgesChange.off(E)})},{immediate:!0}),ms(()=>{if(l){const d=t.get(l.id);d?d.$destroy():Ss(`No store instance found for id ${l.id} in storage.`)}})})}else o&&l.setState(i);if(n&&(Hn(Ga,l),n.vueFlowId=l.id),o){const a=Xt();a?.type.name!=="VueFlow"&&l.emits.error(new Ge(Ue.USEVUEFLOW_OPTIONS))}return l}function A_(e){const{emits:t,dimensions:n}=Fe();let o;ut(()=>{const i=e.value,s=()=>{if(!i)return;const r=xs(i);(r.width===0||r.height===0)&&t.error(new Ge(Ue.MISSING_VIEWPORT_DIMENSIONS)),n.value={width:r.width||500,height:r.height||500}};s(),window.addEventListener("resize",s),i&&(o=new ResizeObserver(()=>s()),o.observe(i)),us(()=>{window.removeEventListener("resize",s),o&&i&&o.unobserve(i)})})}const D_={name:"UserSelection",compatConfig:{MODE:3}},O_=he({...D_,props:{userSelectionRect:{}},setup(e){return(t,n)=>(z(),W("div",{class:"vue-flow__selection vue-flow__container",style:at({width:`${t.userSelectionRect.width}px`,height:`${t.userSelectionRect.height}px`,transform:`translate(${t.userSelectionRect.x}px, ${t.userSelectionRect.y}px)`})},null,4))}}),R_=["tabIndex"],V_={name:"NodesSelection",compatConfig:{MODE:3}},B_=he({...V_,setup(e){const{emits:t,viewport:n,getSelectedNodes:o,noPanClassName:i,disableKeyboardA11y:s,userSelectionActive:r}=Fe(),l=Bd(),a=te(null),u=Od({el:a,onStart(b){t.selectionDragStart(b)},onDrag(b){t.selectionDrag(b)},onStop(b){t.selectionDragStop(b)}});ut(()=>{var b;s.value||(b=a.value)==null||b.focus({preventScroll:!0})});const c=pe(()=>Cd(o.value)),d=pe(()=>({width:`${c.value.width}px`,height:`${c.value.height}px`,top:`${c.value.y}px`,left:`${c.value.x}px`}));function p(b){t.selectionContextMenu({event:b,nodes:o.value})}function h(b){s||so[b.key]&&(b.preventDefault(),l({x:so[b.key].x,y:so[b.key].y},b.shiftKey))}return(b,E)=>!oe(r)&&c.value.width&&c.value.height?(z(),W("div",{key:0,class:ze(["vue-flow__nodesselection vue-flow__container",oe(i)]),style:at({transform:`translate(${oe(n).x}px,${oe(n).y}px) scale(${oe(n).zoom})`})},[x("div",{ref_key:"el",ref:a,class:ze([{dragging:oe(u)},"vue-flow__nodesselection-rect"]),style:at(d.value),tabIndex:oe(s)?void 0:-1,onContextmenu:p,onKeydown:h},null,46,R_)],6)):Ne("",!0)}});function L_(e,t){return{x:e.clientX-t.left,y:e.clientY-t.top}}const F_={name:"Pane",compatConfig:{MODE:3}},z_=he({...F_,props:{isSelecting:{type:Boolean},selectionKeyPressed:{type:Boolean}},setup(e){const{vueFlowRef:t,nodes:n,viewport:o,emits:i,userSelectionActive:s,removeSelectedElements:r,userSelectionRect:l,elementsSelectable:a,nodesSelectionActive:u,getSelectedEdges:c,getSelectedNodes:d,removeNodes:p,removeEdges:h,selectionMode:b,deleteKeyCode:E,multiSelectionKeyCode:N,multiSelectionActive:M,edgeLookup:P,nodeLookup:g,connectionLookup:_,defaultEdgeOptions:O,connectionStartHandle:U}=Fe(),X=te(null),H=te(new Set),F=te(new Set),Z=te(),j=Ve(()=>a.value&&(e.isSelecting||s.value)),C=Ve(()=>U.value!==null);let ee=!1,T=!1;const G=Bo(E,{actInsideInputWithModifier:!1}),k=Bo(N);xe(G,Q=>{Q&&(p(d.value),h(c.value),u.value=!1)}),xe(k,Q=>{M.value=Q});function L(Q,ie){return le=>{le.target===ie&&Q?.(le)}}function $(Q){if(ee||C.value){ee=!1;return}i.paneClick(Q),r(),u.value=!1}function D(Q){Q.preventDefault(),Q.stopPropagation(),i.paneContextMenu(Q)}function V(Q){i.paneScroll(Q)}function Y(Q){var ie,le,me;if(Z.value=(ie=t.value)==null?void 0:ie.getBoundingClientRect(),!a.value||!e.isSelecting||Q.button!==0||Q.target!==X.value||!Z.value)return;(me=(le=Q.target)==null?void 0:le.setPointerCapture)==null||me.call(le,Q.pointerId);const{x:be,y:fe}=L_(Q,Z.value);T=!0,ee=!1,r(),l.value={width:0,height:0,startX:be,startY:fe,x:be,y:fe},i.selectionStart(Q)}function J(Q){var ie;if(!Z.value||!l.value)return;ee=!0;const{x:le,y:me}=Bt(Q,Z.value),{startX:be=0,startY:fe=0}=l.value,we={startX:be,startY:fe,x:lef.id)),F.value=new Set;const S=((ie=O.value)==null?void 0:ie.selectable)??!0;for(const f of H.value){const v=_.value.get(f);if(v)for(const{edgeId:y}of v.values()){const m=P.value.get(y);m&&(m.selectable??S)&&F.value.add(y)}}if(!Ua(de,H.value)){const f=xn(g.value,H.value,!0);i.nodesChange(f)}if(!Ua(w,F.value)){const f=xn(P.value,F.value);i.edgesChange(f)}l.value=we,s.value=!0,u.value=!1}function ue(Q){var ie;Q.button!==0||!T||((ie=Q.target)==null||ie.releasePointerCapture(Q.pointerId),!s.value&&l.value&&Q.target===X.value&&$(Q),s.value=!1,l.value=null,u.value=H.value.size>0,i.selectionEnd(Q),e.selectionKeyPressed&&(ee=!1),T=!1)}return(Q,ie)=>(z(),W("div",{ref_key:"container",ref:X,class:ze(["vue-flow__pane vue-flow__container",{selection:Q.isSelecting}]),onClick:ie[0]||(ie[0]=le=>j.value?void 0:L($,X.value)(le)),onContextmenu:ie[1]||(ie[1]=le=>L(D,X.value)(le)),onWheelPassive:ie[2]||(ie[2]=le=>L(V,X.value)(le)),onPointerenter:ie[3]||(ie[3]=le=>j.value?void 0:oe(i).paneMouseEnter(le)),onPointerdown:ie[4]||(ie[4]=le=>j.value?Y(le):oe(i).paneMouseMove(le)),onPointermove:ie[5]||(ie[5]=le=>j.value?J(le):oe(i).paneMouseMove(le)),onPointerup:ie[6]||(ie[6]=le=>j.value?ue(le):void 0),onPointerleave:ie[7]||(ie[7]=le=>oe(i).paneMouseLeave(le))},[Ct(Q.$slots,"default"),oe(s)&&oe(l)?(z(),Re(O_,{key:0,"user-selection-rect":oe(l)},null,8,["user-selection-rect"])):Ne("",!0),oe(u)&&oe(d).length?(z(),Re(B_,{key:1})):Ne("",!0)],34))}}),H_={name:"Transform",compatConfig:{MODE:3}},U_=he({...H_,setup(e){const{viewport:t,fitViewOnInit:n,fitViewOnInitDone:o}=Fe(),i=pe(()=>n.value?!o.value:!1),s=pe(()=>`translate(${t.value.x}px,${t.value.y}px) scale(${t.value.zoom})`);return(r,l)=>(z(),W("div",{class:"vue-flow__transformationpane vue-flow__container",style:at({transform:s.value,opacity:i.value?0:void 0})},[Ct(r.$slots,"default")],4))}}),G_={name:"Viewport",compatConfig:{MODE:3}},j_=he({...G_,setup(e){const{minZoom:t,maxZoom:n,defaultViewport:o,translateExtent:i,zoomActivationKeyCode:s,selectionKeyCode:r,panActivationKeyCode:l,panOnScroll:a,panOnScrollMode:u,panOnScrollSpeed:c,panOnDrag:d,zoomOnDoubleClick:p,zoomOnPinch:h,zoomOnScroll:b,preventScrolling:E,noWheelClassName:N,noPanClassName:M,emits:P,connectionStartHandle:g,userSelectionActive:_,paneDragging:O,d3Zoom:U,d3Selection:X,d3ZoomHandler:H,viewport:F,viewportRef:Z,paneClickDistance:j}=Fe();A_(Z);const C=zo(!1),ee=zo(!1);let T=null,G=!1,k=0,L={x:0,y:0,zoom:0};const $=Bo(l),D=Bo(r),V=Bo(s),Y=Ve(()=>(!D.value||D.value&&r.value===!0)&&($.value||d.value)),J=Ve(()=>$.value||a.value),ue=Ve(()=>D.value||r.value===!0&&Y.value!==!0);ut(()=>{if(!Z.value){Ss("Viewport element is missing");return}const fe=Z.value,we=fe.getBoundingClientRect(),de=u2().clickDistance(j.value).scaleExtent([t.value,n.value]).translateExtent(i.value),w=wt(fe).call(de),S=w.on("wheel.zoom"),f=fo.translate(o.value.x??0,o.value.y??0).scale(Yn(o.value.zoom??1,t.value,n.value)),v=[[0,0],[we.width,we.height]],y=de.constrain()(f,v,i.value);de.transform(w,y),de.wheelDelta(ie),U.value=de,X.value=w,H.value=S,F.value={x:y.x,y:y.y,zoom:y.k},de.on("start",m=>{var I;if(!m.sourceEvent)return null;k=m.sourceEvent.button,C.value=!0;const B=me(m.transform);((I=m.sourceEvent)==null?void 0:I.type)==="mousedown"&&(O.value=!0),L=B,P.viewportChangeStart(B),P.moveStart({event:m,flowTransform:B})}),de.on("end",m=>{if(!m.sourceEvent)return null;if(C.value=!1,O.value=!1,Q(Y.value,k??0)&&!G&&P.paneContextMenu(m.sourceEvent),G=!1,le(L,m.transform)){const I=me(m.transform);L=I,P.viewportChangeEnd(I),P.moveEnd({event:m,flowTransform:I})}}),de.filter(m=>{var I;const B=V.value||b.value,R=h.value&&m.ctrlKey,A=m.button;if(A===1&&m.type==="mousedown"&&(be(m,"vue-flow__node")||be(m,"vue-flow__edge")))return!0;if(!Y.value&&!B&&!J.value&&!p.value&&!h.value||_.value||!p.value&&m.type==="dblclick"||be(m,N.value)&&m.type==="wheel"||be(m,M.value)&&(m.type!=="wheel"||J.value&&m.type==="wheel"&&!V.value)||!h.value&&m.ctrlKey&&m.type==="wheel"||!B&&!J.value&&!R&&m.type==="wheel")return!1;if(!h&&m.type==="touchstart"&&((I=m.touches)==null?void 0:I.length)>1)return m.preventDefault(),!1;if(!Y.value&&(m.type==="mousedown"||m.type==="touchstart")||r.value===!0&&Array.isArray(d.value)&&d.value.includes(0)&&A===0||Array.isArray(d.value)&&!d.value.includes(A)&&(m.type==="mousedown"||m.type==="touchstart"))return!1;const q=Array.isArray(d.value)&&d.value.includes(A)||r.value===!0&&Array.isArray(d.value)&&!d.value.includes(0)||!A||A<=1;return(!m.ctrlKey||$.value||m.type==="wheel")&&q}),xe([_,Y],()=>{_.value&&!C.value?de.on("zoom",null):_.value||de.on("zoom",m=>{F.value={x:m.transform.x,y:m.transform.y,zoom:m.transform.k};const I=me(m.transform);G=Q(Y.value,k??0),P.viewportChange(I),P.move({event:m,flowTransform:I})})},{immediate:!0}),xe([_,J,u,V,h,E,N],()=>{J.value&&!V.value&&!_.value?w.on("wheel.zoom",m=>{if(be(m,N.value))return!1;const I=V.value||b.value,B=h.value&&m.ctrlKey;if(!(!E.value||J.value||I||B))return!1;m.preventDefault(),m.stopImmediatePropagation();const A=w.property("__zoom").k||1,q=qi();if(!$.value&&m.ctrlKey&&h.value&&q){const Ce=Ot(m),Te=ie(m),qe=A*2**Te;de.scaleTo(w,qe,Ce,m);return}const K=m.deltaMode===1?20:1;let ne=u.value===Vo.Vertical?0:m.deltaX*K,se=u.value===Vo.Horizontal?0:m.deltaY*K;!q&&m.shiftKey&&u.value!==Vo.Vertical&&!ne&&se&&(ne=se,se=0),de.translateBy(w,-(ne/A)*c.value,-(se/A)*c.value);const ge=me(w.property("__zoom"));T&&clearTimeout(T),ee.value?(P.move({event:m,flowTransform:ge}),P.viewportChange(ge),T=setTimeout(()=>{P.moveEnd({event:m,flowTransform:ge}),P.viewportChangeEnd(ge),ee.value=!1},150)):(ee.value=!0,P.moveStart({event:m,flowTransform:ge}),P.viewportChangeStart(ge))},{passive:!1}):typeof S<"u"&&w.on("wheel.zoom",function(m,I){const B=!E.value&&m.type==="wheel"&&!m.ctrlKey,R=V.value||b.value,A=h.value&&m.ctrlKey;if(!R&&!a.value&&!A&&m.type==="wheel"||B||be(m,N.value))return null;m.preventDefault(),S.call(this,m,I)},{passive:!1})},{immediate:!0})});function Q(fe,we){return we===2&&Array.isArray(fe)&&fe.includes(2)}function ie(fe){const we=fe.ctrlKey&&qi()?10:1;return-fe.deltaY*(fe.deltaMode===1?.05:fe.deltaMode?1:.002)*we}function le(fe,we){return fe.x!==we.x&&!Number.isNaN(we.x)||fe.y!==we.y&&!Number.isNaN(we.y)||fe.zoom!==we.k&&!Number.isNaN(we.k)}function me(fe){return{x:fe.x,y:fe.y,zoom:fe.k}}function be(fe,we){return fe.target.closest(`.${we}`)}return(fe,we)=>(z(),W("div",{ref_key:"viewportRef",ref:Z,class:"vue-flow__viewport vue-flow__container"},[Me(z_,{"is-selecting":ue.value,"selection-key-pressed":oe(D),class:ze({connecting:!!oe(g),dragging:oe(O),draggable:oe(d)===!0||Array.isArray(oe(d))&&oe(d).includes(0)})},{default:Ut(()=>[Me(U_,null,{default:Ut(()=>[Ct(fe.$slots,"default")]),_:3})]),_:3},8,["is-selecting","selection-key-pressed","class"])],512))}}),Y_=["id"],K_=["id"],X_=["id"],W_={name:"A11yDescriptions",compatConfig:{MODE:3}},Z_=he({...W_,setup(e){const{id:t,disableKeyboardA11y:n,ariaLiveMessage:o}=Fe();return(i,s)=>(z(),W(_e,null,[x("div",{id:`${oe(md)}-${oe(t)}`,style:{display:"none"}}," Press enter or space to select a node. "+Ae(oe(n)?"":"You can then use the arrow keys to move the node around.")+" You can then use the arrow keys to move the node around, press delete to remove it and press escape to cancel. ",9,Y_),x("div",{id:`${oe(yd)}-${oe(t)}`,style:{display:"none"}}," Press enter or space to select an edge. You can then press delete to remove it or press escape to cancel. ",8,K_),oe(n)?Ne("",!0):(z(),W("div",{key:0,id:`${oe(g2)}-${oe(t)}`,"aria-live":"assertive","aria-atomic":"true",style:{position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)","clip-path":"inset(100%)"}},Ae(oe(o)),9,X_))],64))}});function q_(){const e=Fe();xe(()=>e.viewportHelper.value.viewportInitialized,t=>{t&&setTimeout(()=>{e.emits.init(e),e.emits.paneReady(e)},1)})}function J_(e,t,n){return n===ae.Left?e-t:n===ae.Right?e+t:e}function Q_(e,t,n){return n===ae.Top?e-t:n===ae.Bottom?e+t:e}const al=function({radius:e=10,centerX:t=0,centerY:n=0,position:o=ae.Top,type:i}){return Ie("circle",{class:`vue-flow__edgeupdater vue-flow__edgeupdater-${i}`,cx:J_(t,e,o),cy:Q_(n,e,o),r:e,stroke:"transparent",fill:"transparent"})};al.props=["radius","centerX","centerY","position","type"];al.compatConfig={MODE:3};const Wa=al,e4=he({name:"Edge",compatConfig:{MODE:3},props:["id"],setup(e){const{id:t,addSelectedEdges:n,connectionMode:o,edgeUpdaterRadius:i,emits:s,nodesSelectionActive:r,noPanClassName:l,getEdgeTypes:a,removeSelectedEdges:u,findEdge:c,findNode:d,isValidConnection:p,multiSelectionActive:h,disableKeyboardA11y:b,elementsSelectable:E,edgesUpdatable:N,edgesFocusable:M,hooks:P}=Fe(),g=pe(()=>c(e.id)),{emit:_,on:O}=j2(g.value,s),U=mt(Cs),X=Xt(),H=te(!1),F=te(!1),Z=te(""),j=te(null),C=te("source"),ee=te(null),T=Ve(()=>typeof g.value.selectable>"u"?E.value:g.value.selectable),G=Ve(()=>typeof g.value.updatable>"u"?N.value:g.value.updatable),k=Ve(()=>typeof g.value.focusable>"u"?M.value:g.value.focusable);Hn(H2,e.id),Hn(U2,ee);const L=pe(()=>g.value.class instanceof Function?g.value.class(g.value):g.value.class),$=pe(()=>g.value.style instanceof Function?g.value.style(g.value):g.value.style),D=pe(()=>{const v=g.value.type||"default",y=U?.[`edge-${v}`];if(y)return y;let m=g.value.template??a.value[v];if(typeof m=="string"&&X){const I=Object.keys(X.appContext.components);I&&I.includes(v)&&(m=Bn(v,!1))}return m&&typeof m!="string"?m:(s.error(new Ge(Ue.EDGE_TYPE_MISSING,m)),!1)}),{handlePointerDown:V}=Rd({nodeId:Z,handleId:j,type:C,isValidConnection:p,edgeUpdaterType:C,onEdgeUpdate:ue,onEdgeUpdateEnd:Q});return()=>{const v=d(g.value.source),y=d(g.value.target),m="pathOptions"in g.value?g.value.pathOptions:{};if(!v&&!y)return s.error(new Ge(Ue.EDGE_SOURCE_TARGET_MISSING,g.value.id,g.value.source,g.value.target)),null;if(!v)return s.error(new Ge(Ue.EDGE_SOURCE_MISSING,g.value.id,g.value.source)),null;if(!y)return s.error(new Ge(Ue.EDGE_TARGET_MISSING,g.value.id,g.value.target)),null;if(!g.value||g.value.hidden||v.hidden||y.hidden)return null;let I;o.value===Cn.Strict?I=v.handleBounds.source:I=[...v.handleBounds.source||[],...v.handleBounds.target||[]];const B=Va(I,g.value.sourceHandle);let R;o.value===Cn.Strict?R=y.handleBounds.target:R=[...y.handleBounds.target||[],...y.handleBounds.source||[]];const A=Va(R,g.value.targetHandle),q=B?.position||ae.Bottom,K=A?.position||ae.Top,{x:ne,y:se}=ho(v,B,q),{x:ge,y:Ce}=ho(y,A,K);return g.value.sourceX=ne,g.value.sourceY=se,g.value.targetX=ge,g.value.targetY=Ce,Ie("g",{ref:ee,key:e.id,"data-id":e.id,class:["vue-flow__edge",`vue-flow__edge-${D.value===!1?"default":g.value.type||"default"}`,l.value,L.value,{updating:H.value,selected:g.value.selected,animated:g.value.animated,inactive:!T.value&&!P.value.edgeClick.hasListeners()}],tabIndex:k.value?0:void 0,"aria-label":g.value.ariaLabel===null?void 0:g.value.ariaLabel??`Edge from ${g.value.source} to ${g.value.target}`,"aria-describedby":k.value?`${yd}-${t}`:void 0,"aria-roledescription":"edge",role:k.value?"group":"img",...g.value.domAttributes,onClick:le,onContextmenu:me,onDblclick:be,onMouseenter:fe,onMousemove:we,onMouseleave:de,onKeyDown:k.value?f:void 0},[F.value?null:Ie(D.value===!1?a.value.default:D.value,{id:e.id,sourceNode:v,targetNode:y,source:g.value.source,target:g.value.target,type:g.value.type,updatable:G.value,selected:g.value.selected,animated:g.value.animated,label:g.value.label,labelStyle:g.value.labelStyle,labelShowBg:g.value.labelShowBg,labelBgStyle:g.value.labelBgStyle,labelBgPadding:g.value.labelBgPadding,labelBgBorderRadius:g.value.labelBgBorderRadius,data:g.value.data,events:{...g.value.events,...O},style:$.value,markerStart:`url('#${ei(g.value.markerStart,t)}')`,markerEnd:`url('#${ei(g.value.markerEnd,t)}')`,sourcePosition:q,targetPosition:K,sourceX:ne,sourceY:se,targetX:ge,targetY:Ce,sourceHandleId:g.value.sourceHandle,targetHandleId:g.value.targetHandle,interactionWidth:g.value.interactionWidth,...m}),[G.value==="source"||G.value===!0?[Ie("g",{onMousedown:w,onMouseenter:Y,onMouseout:J},Ie(Wa,{position:q,centerX:ne,centerY:se,radius:i.value,type:"source","data-type":"source"}))]:null,G.value==="target"||G.value===!0?[Ie("g",{onMousedown:S,onMouseenter:Y,onMouseout:J},Ie(Wa,{position:K,centerX:ge,centerY:Ce,radius:i.value,type:"target","data-type":"target"}))]:null]])};function Y(){H.value=!0}function J(){H.value=!1}function ue(v,y){_.update({event:v,edge:g.value,connection:y})}function Q(v){_.updateEnd({event:v,edge:g.value}),F.value=!1}function ie(v,y){v.button===0&&(F.value=!0,Z.value=y?g.value.target:g.value.source,j.value=(y?g.value.targetHandle:g.value.sourceHandle)??null,C.value=y?"target":"source",_.updateStart({event:v,edge:g.value}),V(v))}function le(v){var y;const m={event:v,edge:g.value};T.value&&(r.value=!1,g.value.selected&&h.value?(u([g.value]),(y=ee.value)==null||y.blur()):n([g.value])),_.click(m)}function me(v){_.contextMenu({event:v,edge:g.value})}function be(v){_.doubleClick({event:v,edge:g.value})}function fe(v){_.mouseEnter({event:v,edge:g.value})}function we(v){_.mouseMove({event:v,edge:g.value})}function de(v){_.mouseLeave({event:v,edge:g.value})}function w(v){ie(v,!0)}function S(v){ie(v,!1)}function f(v){var y;!b.value&&_d.includes(v.key)&&T.value&&(v.key==="Escape"?((y=ee.value)==null||y.blur(),u([c(e.id)])):n([c(e.id)]))}}}),t4=e4,n4=he({name:"ConnectionLine",compatConfig:{MODE:3},setup(){var e;const{id:t,connectionMode:n,connectionStartHandle:o,connectionEndHandle:i,connectionPosition:s,connectionLineType:r,connectionLineStyle:l,connectionLineOptions:a,connectionStatus:u,viewport:c,findNode:d}=Fe(),p=(e=mt(Cs))==null?void 0:e["connection-line"],h=pe(()=>{var P;return d((P=o.value)==null?void 0:P.nodeId)}),b=pe(()=>{var P;return d((P=i.value)==null?void 0:P.nodeId)??null}),E=pe(()=>({x:(s.value.x-c.value.x)/c.value.zoom,y:(s.value.y-c.value.y)/c.value.zoom})),N=pe(()=>a.value.markerStart?`url(#${ei(a.value.markerStart,t)})`:""),M=pe(()=>a.value.markerEnd?`url(#${ei(a.value.markerEnd,t)})`:"");return()=>{var P,g,_;if(!h.value||!o.value)return null;const O=o.value.id,U=o.value.type,X=h.value.handleBounds;let H=X?.[U]??[];if(n.value===Cn.Loose){const $=X?.[U==="source"?"target":"source"]??[];H=[...H,...$]}if(!H)return null;const F=(O?H.find($=>$.id===O):H[0])??null,Z=F?.position??ae.Top,{x:j,y:C}=ho(h.value,F,Z);let ee=null;b.value&&(n.value===Cn.Strict?ee=((P=b.value.handleBounds[U==="source"?"target":"source"])==null?void 0:P.find($=>{var D;return $.id===((D=i.value)==null?void 0:D.id)}))||null:ee=((g=[...b.value.handleBounds.source??[],...b.value.handleBounds.target??[]])==null?void 0:g.find($=>{var D;return $.id===((D=i.value)==null?void 0:D.id)}))||null);const T=((_=i.value)==null?void 0:_.position)??(Z?$r[Z]:null);if(!Z||!T)return null;const G=r.value??a.value.type??An.Bezier;let k="";const L={sourceX:j,sourceY:C,sourcePosition:Z,targetX:E.value.x,targetY:E.value.y,targetPosition:T};return G===An.Bezier?[k]=Hd(L):G===An.Step?[k]=kr({...L,borderRadius:0}):G===An.SmoothStep?[k]=kr(L):G===An.SimpleBezier?[k]=Ud(L):k=`M${j},${C} ${E.value.x},${E.value.y}`,Ie("svg",{class:"vue-flow__edges vue-flow__connectionline vue-flow__container"},Ie("g",{class:"vue-flow__connection"},p?Ie(p,{sourceX:j,sourceY:C,sourcePosition:Z,targetX:E.value.x,targetY:E.value.y,targetPosition:T,sourceNode:h.value,sourceHandle:F,targetNode:b.value,targetHandle:ee,markerEnd:M.value,markerStart:N.value,connectionStatus:u.value}):Ie("path",{d:k,class:[a.value.class,u,"vue-flow__connection-path"],style:{...l.value,...a.value.style},"marker-end":M.value,"marker-start":N.value})))}}}),o4=n4,i4=["id","markerWidth","markerHeight","markerUnits","orient"],s4={name:"MarkerType",compatConfig:{MODE:3}},r4=he({...s4,props:{id:{},type:{},color:{default:"none"},width:{default:12.5},height:{default:12.5},markerUnits:{default:"strokeWidth"},orient:{default:"auto-start-reverse"},strokeWidth:{default:1}},setup(e){return(t,n)=>(z(),W("marker",{id:t.id,class:"vue-flow__arrowhead",viewBox:"-10 -10 20 20",refX:"0",refY:"0",markerWidth:`${t.width}`,markerHeight:`${t.height}`,markerUnits:t.markerUnits,orient:t.orient},[t.type===oe(Nr).ArrowClosed?(z(),W("polyline",{key:0,style:at({stroke:t.color,fill:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",points:"-5,-4 0,0 -5,4 -5,-4"},null,4)):Ne("",!0),t.type===oe(Nr).Arrow?(z(),W("polyline",{key:1,style:at({stroke:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",fill:"none",points:"-5,-4 0,0 -5,4"},null,4)):Ne("",!0)],8,i4))}}),l4={class:"vue-flow__marker vue-flow__container","aria-hidden":"true"},a4={name:"MarkerDefinitions",compatConfig:{MODE:3}},u4=he({...a4,setup(e){const{id:t,edges:n,connectionLineOptions:o,defaultMarkerColor:i}=Fe(),s=pe(()=>{const r=new Set,l=[],a=u=>{if(u){const c=ei(u,t);r.has(c)||(typeof u=="object"?l.push({...u,id:c,color:u.color||i.value}):l.push({id:c,color:i.value,type:u}),r.add(c))}};for(const u of[o.value.markerEnd,o.value.markerStart])a(u);for(const u of n.value)for(const c of[u.markerStart,u.markerEnd])a(c);return l.sort((u,c)=>u.id.localeCompare(c.id))});return(r,l)=>(z(),W("svg",l4,[x("defs",null,[(z(!0),W(_e,null,Ye(s.value,a=>(z(),Re(r4,{id:a.id,key:a.id,type:a.type,color:a.color,width:a.width,height:a.height,markerUnits:a.markerUnits,"stroke-width":a.strokeWidth,orient:a.orient},null,8,["id","type","color","width","height","markerUnits","stroke-width","orient"]))),128))])]))}}),c4={name:"Edges",compatConfig:{MODE:3}},d4=he({...c4,setup(e){const{findNode:t,getEdges:n,elevateEdgesOnSelect:o}=Fe();return(i,s)=>(z(),W(_e,null,[Me(u4),(z(!0),W(_e,null,Ye(oe(n),r=>(z(),W("svg",{key:r.id,class:"vue-flow__edges vue-flow__container",style:at({zIndex:oe($2)(r,oe(t),oe(o))})},[Me(oe(t4),{id:r.id},null,8,["id"])],4))),128)),Me(oe(o4))],64))}}),f4=he({name:"Node",compatConfig:{MODE:3},props:["id","resizeObserver"],setup(e){const{id:t,noPanClassName:n,selectNodesOnDrag:o,nodesSelectionActive:i,multiSelectionActive:s,emits:r,removeSelectedNodes:l,addSelectedNodes:a,updateNodeDimensions:u,onUpdateNodeInternals:c,getNodeTypes:d,nodeExtent:p,elevateNodesOnSelect:h,disableKeyboardA11y:b,ariaLiveMessage:E,snapToGrid:N,snapGrid:M,nodeDragThreshold:P,nodesDraggable:g,elementsSelectable:_,nodesConnectable:O,nodesFocusable:U,hooks:X}=Fe(),H=te(null);Hn(Dd,H),Hn(Ad,e.id);const F=mt(Cs),Z=Xt(),j=Bd(),{node:C,parentNode:ee}=Vd(e.id),{emit:T,on:G}=W2(C,r),k=Ve(()=>typeof C.draggable>"u"?g.value:C.draggable),L=Ve(()=>typeof C.selectable>"u"?_.value:C.selectable),$=Ve(()=>typeof C.connectable>"u"?O.value:C.connectable),D=Ve(()=>typeof C.focusable>"u"?U.value:C.focusable),V=pe(()=>L.value||k.value||X.value.nodeClick.hasListeners()||X.value.nodeDoubleClick.hasListeners()||X.value.nodeMouseEnter.hasListeners()||X.value.nodeMouseMove.hasListeners()||X.value.nodeMouseLeave.hasListeners()),Y=Ve(()=>!!C.dimensions.width&&!!C.dimensions.height),J=pe(()=>{const y=C.type||"default",m=F?.[`node-${y}`];if(m)return m;let I=C.template||d.value[y];if(typeof I=="string"&&Z){const B=Object.keys(Z.appContext.components);B&&B.includes(y)&&(I=Bn(y,!1))}return I&&typeof I!="string"?I:(r.error(new Ge(Ue.NODE_TYPE_MISSING,I)),!1)}),ue=Od({id:e.id,el:H,disabled:()=>!k.value,selectable:L,dragHandle:()=>C.dragHandle,onStart(y){T.dragStart(y)},onDrag(y){T.drag(y)},onStop(y){T.dragStop(y)},onClick(y){f(y)}}),Q=pe(()=>C.class instanceof Function?C.class(C):C.class),ie=pe(()=>{const y=(C.style instanceof Function?C.style(C):C.style)||{},m=C.width instanceof Function?C.width(C):C.width,I=C.height instanceof Function?C.height(C):C.height;return!y.width&&m&&(y.width=typeof m=="string"?m:`${m}px`),!y.height&&I&&(y.height=typeof I=="string"?I:`${I}px`),y}),le=Ve(()=>Number(C.zIndex??ie.value.zIndex??0));return c(y=>{(y.includes(e.id)||!y.length)&&be()}),ut(()=>{xe(()=>C.hidden,(y=!1,m,I)=>{!y&&H.value&&(e.resizeObserver.observe(H.value),I(()=>{H.value&&e.resizeObserver.unobserve(H.value)}))},{immediate:!0,flush:"post"})}),xe([()=>C.type,()=>C.sourcePosition,()=>C.targetPosition],()=>{ht(()=>{u([{id:e.id,nodeElement:H.value,forceUpdate:!0}])})}),xe([()=>C.position.x,()=>C.position.y,()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.x},()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.y},()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.z},le,()=>C.selected,()=>C.dimensions.height,()=>C.dimensions.width,()=>{var y;return(y=ee.value)==null?void 0:y.dimensions.height},()=>{var y;return(y=ee.value)==null?void 0:y.dimensions.width}],([y,m,I,B,R,A])=>{const q={x:y,y:m,z:A+(h.value&&C.selected?1e3:0)};typeof I<"u"&&typeof B<"u"?C.computedPosition=E2({x:I,y:B,z:R},q):C.computedPosition=q},{flush:"post",immediate:!0}),xe([()=>C.extent,p],([y,m],[I,B])=>{(y!==I||m!==B)&&me()}),C.extent==="parent"||typeof C.extent=="object"&&"range"in C.extent&&C.extent.range==="parent"?mr(()=>Y).toBe(!0).then(me):me(),()=>C.hidden?null:Ie("div",{ref:H,"data-id":C.id,class:["vue-flow__node",`vue-flow__node-${J.value===!1?"default":C.type||"default"}`,{[n.value]:k.value,dragging:ue?.value,draggable:k.value,selected:C.selected,selectable:L.value,parent:C.isParent},Q.value],style:{visibility:Y.value?"visible":"hidden",zIndex:C.computedPosition.z??le.value,transform:`translate(${C.computedPosition.x}px,${C.computedPosition.y}px)`,pointerEvents:V.value?"all":"none",...ie.value},tabIndex:D.value?0:void 0,role:D.value?"group":void 0,"aria-describedby":b.value?void 0:`${md}-${t}`,"aria-label":C.ariaLabel,"aria-roledescription":"node",...C.domAttributes,onMouseenter:fe,onMousemove:we,onMouseleave:de,onContextmenu:w,onClick:f,onDblclick:S,onKeydown:v},[Ie(J.value===!1?d.value.default:J.value,{id:C.id,type:C.type,data:C.data,events:{...C.events,...G},selected:C.selected,resizing:C.resizing,dragging:ue.value,connectable:$.value,position:C.computedPosition,dimensions:C.dimensions,isValidTargetPos:C.isValidTargetPos,isValidSourcePos:C.isValidSourcePos,parent:C.parentNode,parentNodeId:C.parentNode,zIndex:C.computedPosition.z??le.value,targetPosition:C.targetPosition,sourcePosition:C.sourcePosition,label:C.label,dragHandle:C.dragHandle,onUpdateNodeInternals:be})]);function me(){const y=C.computedPosition,{computedPosition:m,position:I}=rl(C,N.value?Es(y,M.value):y,r.error,p.value,ee.value);(C.computedPosition.x!==m.x||C.computedPosition.y!==m.y)&&(C.computedPosition={...C.computedPosition,...m}),(C.position.x!==I.x||C.position.y!==I.y)&&(C.position=I)}function be(){H.value&&u([{id:e.id,nodeElement:H.value,forceUpdate:!0}])}function fe(y){ue?.value||T.mouseEnter({event:y,node:C})}function we(y){ue?.value||T.mouseMove({event:y,node:C})}function de(y){ue?.value||T.mouseLeave({event:y,node:C})}function w(y){return T.contextMenu({event:y,node:C})}function S(y){return T.doubleClick({event:y,node:C})}function f(y){L.value&&(!o.value||!k.value||P.value>0)&&Ir(C,s.value,a,l,i,!1,H.value),T.click({event:y,node:C})}function v(y){if(!(Tr(y)||b.value))if(_d.includes(y.key)&&L.value){const m=y.key==="Escape";Ir(C,s.value,a,l,i,m,H.value)}else k.value&&C.selected&&so[y.key]&&(y.preventDefault(),E.value=`Moved selected node ${y.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~C.position.x}, y: ${~~C.position.y}`,j({x:so[y.key].x,y:so[y.key].y},y.shiftKey))}}}),h4=f4;function p4(e={includeHiddenNodes:!1}){const{nodes:t}=Fe();return pe(()=>{if(t.value.length===0)return!1;for(const n of t.value)if((e.includeHiddenNodes||!n.hidden)&&(n?.handleBounds===void 0||n.dimensions.width===0||n.dimensions.height===0))return!1;return!0})}const g4={class:"vue-flow__nodes vue-flow__container"},v4={name:"Nodes",compatConfig:{MODE:3}},m4=he({...v4,setup(e){const{getNodes:t,updateNodeDimensions:n,emits:o}=Fe(),i=p4(),s=te();return xe(i,r=>{r&&ht(()=>{o.nodesInitialized(t.value)})},{immediate:!0}),ut(()=>{s.value=new ResizeObserver(r=>{const l=r.map(a=>({id:a.target.getAttribute("data-id"),nodeElement:a.target,forceUpdate:!0}));ht(()=>n(l))})}),us(()=>{var r;return(r=s.value)==null?void 0:r.disconnect()}),(r,l)=>(z(),W("div",g4,[s.value?(z(!0),W(_e,{key:0},Ye(oe(t),(a,u,c,d)=>{const p=[a.id];if(d&&d.key===a.id&&Gh(d,p))return d;const h=(z(),Re(oe(h4),{id:a.id,key:a.id,"resize-observer":s.value},null,8,["id","resize-observer"]));return h.memo=p,h},l,0),128)):Ne("",!0)]))}});function y4(){const{emits:e}=Fe();ut(()=>{if(Pd()){const t=document.querySelector(".vue-flow__pane");t&&window.getComputedStyle(t).zIndex!=="1"&&e.error(new Ge(Ue.MISSING_STYLES))}})}const _4=x("div",{class:"vue-flow__edge-labels"},null,-1),b4={name:"VueFlow",compatConfig:{MODE:3}},w4=he({...b4,props:{id:{},modelValue:{},nodes:{},edges:{},edgeTypes:{},nodeTypes:{},connectionMode:{},connectionLineType:{},connectionLineStyle:{default:void 0},connectionLineOptions:{default:void 0},connectionRadius:{},isValidConnection:{type:[Function,null],default:void 0},deleteKeyCode:{default:void 0},selectionKeyCode:{type:[Boolean,null],default:void 0},multiSelectionKeyCode:{default:void 0},zoomActivationKeyCode:{default:void 0},panActivationKeyCode:{default:void 0},snapToGrid:{type:Boolean,default:void 0},snapGrid:{},onlyRenderVisibleElements:{type:Boolean,default:void 0},edgesUpdatable:{type:[Boolean,String],default:void 0},nodesDraggable:{type:Boolean,default:void 0},nodesConnectable:{type:Boolean,default:void 0},nodeDragThreshold:{},elementsSelectable:{type:Boolean,default:void 0},selectNodesOnDrag:{type:Boolean,default:void 0},panOnDrag:{type:[Boolean,Array],default:void 0},minZoom:{},maxZoom:{},defaultViewport:{},translateExtent:{},nodeExtent:{},defaultMarkerColor:{},zoomOnScroll:{type:Boolean,default:void 0},zoomOnPinch:{type:Boolean,default:void 0},panOnScroll:{type:Boolean,default:void 0},panOnScrollSpeed:{},panOnScrollMode:{},paneClickDistance:{},zoomOnDoubleClick:{type:Boolean,default:void 0},preventScrolling:{type:Boolean,default:void 0},selectionMode:{},edgeUpdaterRadius:{},fitViewOnInit:{type:Boolean,default:void 0},connectOnClick:{type:Boolean,default:void 0},applyDefault:{type:Boolean,default:void 0},autoConnect:{type:[Boolean,Function],default:void 0},noDragClassName:{},noWheelClassName:{},noPanClassName:{},defaultEdgeOptions:{},elevateEdgesOnSelect:{type:Boolean,default:void 0},elevateNodesOnSelect:{type:Boolean,default:void 0},disableKeyboardA11y:{type:Boolean,default:void 0},edgesFocusable:{type:Boolean,default:void 0},nodesFocusable:{type:Boolean,default:void 0},autoPanOnConnect:{type:Boolean,default:void 0},autoPanOnNodeDrag:{type:Boolean,default:void 0},autoPanSpeed:{}},emits:["nodesChange","edgesChange","nodesInitialized","paneReady","init","updateNodeInternals","error","connect","connectStart","connectEnd","clickConnectStart","clickConnectEnd","moveStart","move","moveEnd","selectionDragStart","selectionDrag","selectionDragStop","selectionContextMenu","selectionStart","selectionEnd","viewportChangeStart","viewportChange","viewportChangeEnd","paneScroll","paneClick","paneContextMenu","paneMouseEnter","paneMouseMove","paneMouseLeave","edgeUpdate","edgeContextMenu","edgeMouseEnter","edgeMouseMove","edgeMouseLeave","edgeDoubleClick","edgeClick","edgeUpdateStart","edgeUpdateEnd","nodeContextMenu","nodeMouseEnter","nodeMouseMove","nodeMouseLeave","nodeDoubleClick","nodeClick","nodeDragStart","nodeDrag","nodeDragStop","miniMapNodeClick","miniMapNodeDoubleClick","miniMapNodeMouseEnter","miniMapNodeMouseMove","miniMapNodeMouseLeave","update:modelValue","update:nodes","update:edges"],setup(e,{expose:t,emit:n}){const o=e,i=nh(),s=zs(o,"modelValue",n),r=zs(o,"nodes",n),l=zs(o,"edges",n),a=Fe(o),u=Q2({modelValue:s,nodes:r,edges:l},o,a);return t_(n,a.hooks),q_(),y4(),Hn(Cs,i),jr(()=>{u()}),t(a),(c,d)=>(z(),W("div",{ref:oe(a).vueFlowRef,class:"vue-flow"},[Me(j_,null,{default:Ut(()=>[Me(d4),_4,Me(m4),Ct(c.$slots,"zoom-pane")]),_:3}),Ct(c.$slots,"default"),Me(Z_)],512))}});var sn=(e=>(e.Lines="lines",e.Dots="dots",e))(sn||{});const jd=function({dimensions:e,size:t,color:n}){return Ie("path",{stroke:n,"stroke-width":t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`})},Yd=function({radius:e,color:t}){return Ie("circle",{cx:e,cy:e,r:e,fill:t})};sn.Lines+"",sn.Dots+"";const x4={[sn.Dots]:"#81818a",[sn.Lines]:"#eee"},E4=["id","x","y","width","height","patternTransform"],S4={key:2,height:"100",width:"100"},C4=["fill"],N4=["x","y","fill"],T4={name:"Background",compatConfig:{MODE:3}},M4=he({...T4,props:{id:{},variant:{default:()=>sn.Dots},gap:{default:20},size:{default:1},lineWidth:{default:1},patternColor:{},color:{},bgColor:{},height:{default:100},width:{default:100},x:{default:0},y:{default:0},offset:{default:0}},setup(e){const{id:t,viewport:n}=Fe(),o=pe(()=>{const r=n.value.zoom,[l,a]=Array.isArray(e.gap)?e.gap:[e.gap,e.gap],u=[l*r||1,a*r||1],c=e.size*r,[d,p]=Array.isArray(e.offset)?e.offset:[e.offset,e.offset],h=[d*r||1+u[0]/2,p*r||1+u[1]/2];return{scaledGap:u,offset:h,size:c}}),i=Ve(()=>`pattern-${t}${e.id?`-${e.id}`:""}`),s=Ve(()=>e.color||e.patternColor||x4[e.variant||sn.Dots]);return(r,l)=>(z(),W("svg",{class:"vue-flow__background vue-flow__container",style:at({height:`${r.height>100?100:r.height}%`,width:`${r.width>100?100:r.width}%`})},[Ct(r.$slots,"pattern-container",{id:i.value},()=>[x("pattern",{id:i.value,x:oe(n).x%o.value.scaledGap[0],y:oe(n).y%o.value.scaledGap[1],width:o.value.scaledGap[0],height:o.value.scaledGap[1],patternTransform:`translate(-${o.value.offset[0]},-${o.value.offset[1]})`,patternUnits:"userSpaceOnUse"},[Ct(r.$slots,"pattern",{},()=>[r.variant===oe(sn).Lines?(z(),Re(oe(jd),{key:0,size:r.lineWidth,color:s.value,dimensions:o.value.scaledGap},null,8,["size","color","dimensions"])):r.variant===oe(sn).Dots?(z(),Re(oe(Yd),{key:1,color:s.value,radius:o.value.size/2},null,8,["color","radius"])):Ne("",!0),r.bgColor?(z(),W("svg",S4,[x("rect",{width:"100%",height:"100%",fill:r.bgColor},null,8,C4)])):Ne("",!0)])],8,E4)]),x("rect",{x:r.x,y:r.y,width:"100%",height:"100%",fill:`url(#${i.value})`},null,8,N4),Ct(r.$slots,"default",{id:i.value})],4))}}),$4={class:"vue-flow-container"},I4={class:"vue-flow-viewport"},k4={class:"viewport-wrapper"},P4={class:"create-wrapper"},A4={key:0,class:"floating-create-expanded"},D4={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-check",style:{height:"100%"}},O4=he({__name:"SchemaEditor",setup(e){const t=_t(),n=Wt(),o=te(""),i=te(!1),s=te(!0),r=()=>{const h=o.value.trim();if(h!==""){if(!Lc(h)){Kt(Yt.modelName);return}t.createNode(h),o.value="",i.value=!1}},l=h=>{t.deleteNode(h)},a=h=>{n.open(h,vm,{id:h})},u=h=>{n.open(h,Iv,{id:h})},c=(h,b)=>{n.open("Edit field",jv,{id:h,field:b})},d=h=>{n.open(h,dm,{id:h})},p=(h,b)=>{n.open(b.fieldName,tm,{id:h,relation:b})};return(h,b)=>(z(),W("div",$4,[x("div",I4,[x("div",k4,[x("div",{class:"toggle-grid-button",onClick:b[0]||(b[0]=E=>s.value=!s.value)},"#"),Me(oe(w4),{nodes:oe(t).nodes,"onUpdate:nodes":b[4]||(b[4]=E=>oe(t).nodes=E),edges:oe(t).edges,"onUpdate:edges":b[5]||(b[5]=E=>oe(t).edges=E),"default-viewport":{zoom:2},"max-zoom":2,"min-zoom":.1,"fit-view-on-init":!0},{"node-custom":Ut(E=>[Me(pv,Mn(E,{onDeleteNode:l,onRenameNode:a,onAddField:u,onAddRelation:d,onOpenEditFieldModal:c,onOpenEditRelationModal:p}),null,16)]),default:Ut(()=>[s.value?(z(),Re(oe(M4),{key:0,variant:"lines",size:51,gap:51})):Ne("",!0),x("div",P4,[i.value?(z(),W("div",A4,[x("button",{class:"collapse-btn",onClick:b[1]||(b[1]=E=>i.value=!1)},b[6]||(b[6]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-left size-4 rdp-nav_icon"},[x("path",{d:"m15 18-6-6 6-6"})],-1)])),ye(x("input",{class:"create-model-input",type:"text",placeholder:"Enter Model Name","onUpdate:modelValue":b[2]||(b[2]=E=>o.value=E),onKeyup:fr(r,["enter"]),maxlength:"100"},null,544),[[tt,o.value]]),x("button",{class:"create-model-btn",onClick:r},[(z(),W("svg",D4,b[7]||(b[7]=[x("path",{d:"M20 6 9 17l-5-5"},null,-1)])))])])):Ne("",!0),i.value?Ne("",!0):(z(),W("div",{key:1,class:"create-circle",onClick:b[3]||(b[3]=E=>i.value=!0)},"+"))])]),_:1},8,["nodes","edges"])])])]))}}),R4=Xe(O4,[["__scopeId","data-v-87b25a7b"]]),V4={class:"field-modal-container"},B4={class:"input-container"},L4={class:"input-group"},F4={class:"input-group"},z4=he({__name:"AddEnumValueModal",props:{enumName:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te("auto()"),r=()=>{if(!Fc(i.value)){Kt(Yt.enumValueName);return}n.addEnumValue(t.enumName,{name:i.value,value:s.value}),o.close()};return(l,a)=>(z(),W("main",V4,[x("div",B4,[x("div",L4,[a[2]||(a[2]=x("label",{class:"field-label"},"Name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[0]||(a[0]=u=>i.value=u),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",F4,[a[3]||(a[3]=x("label",{class:"field-label"},"Value",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[1]||(a[1]=u=>s.value=u),type:"text",maxlength:"100"},null,512),[[tt,s.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:r},"Save")])]))}}),H4=Xe(z4,[["__scopeId","data-v-33da89f7"]]),U4={class:"field-modal-container"},G4={class:"input-container"},j4={class:"input-group"},Y4={class:"input-group"},K4=he({__name:"EditEnumValueModal",props:{enumName:{},enumValue:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(t.enumValue.name),s=te(t.enumValue.value),r=()=>{if(!Fc(i.value)){Kt(Yt.enumValueName);return}n.updateEnumValue(t.enumName,t.enumValue.name,{name:i.value,value:s.value}),o.close()};return(l,a)=>(z(),W("main",U4,[x("div",G4,[x("div",j4,[a[2]||(a[2]=x("label",{class:"field-label"},"Name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[0]||(a[0]=u=>i.value=u),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",Y4,[a[3]||(a[3]=x("label",{class:"field-label"},"Value",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[1]||(a[1]=u=>s.value=u),type:"text",maxlength:"100"},null,512),[[tt,s.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:r},"Save")])]))}}),X4=Xe(K4,[["__scopeId","data-v-08474887"]]),W4={class:"layout-container"},Z4={class:"enum-sidebar"},q4={class:"sidebar-header"},J4={class:"input-group"},Q4={class:"input-horizontal"},e3=["disabled"],t3={class:"enum-list"},n3=["onClick"],o3={class:"enum-name-wrapper"},i3={key:0},s3=["onKeyup"],r3={class:"enum-item-actions"},l3=["onClick"],a3={key:0},u3={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-pencil"},c3=["onClick"],d3={key:0,class:"main-content"},f3={class:"main-table"},h3={class:"name-column"},p3={class:"value-column"},g3={class:"action-column"},v3={class:"action-content"},m3=["onMouseover","onMouseleave"],y3={key:0,class:"dropdown-list"},_3=["onClick"],b3=["onClick"],w3=he({__name:"EnumEditor",setup(e){const t=_t(),n=Wt(),o=te(""),i=te(null),s=te(null),r=te(""),l=te(null),a=te(null),u=()=>{const _=i.value;_&&n.open("Add Enum Value",H4,{enumName:_.name})},c=_=>{const O=i.value;O&&n.open("Edit Enum Value",X4,{enumName:O.name,enumValue:_})},d=_=>{console.log("Delete enum value:",_)},p=_=>{i.value=_},h=()=>{const _=o.value.trim();if(_==="")return;if(!aa(_)){Kt(Yt.enumName);return}const O=t.addEnum(_);o.value="",p(O)},b=_=>{t.deleteEnum(_.name),i.value?.name===_.name&&(i.value=null)},E=_=>s.value===_.name,N=_=>{E(_)?M(_):(s.value=_.name,r.value=_.name)},M=_=>{const O=r.value.trim();O&&O!==_.name&&(aa(O)?(t.updateEnumName(_.name,O),i.value?.name===_.name&&(i.value.name=O)):Kt(Yt.enumName)),s.value=null,r.value=""},P=_=>{l.value=_},g=_=>{l.value===_&&(l.value=null)};return(_,O)=>(z(),W("div",W4,[x("div",Z4,[x("div",q4,[x("div",J4,[x("div",Q4,[ye(x("input",{id:"new-enum-name",class:"project-name",type:"text",placeholder:"Enter new enum name","onUpdate:modelValue":O[0]||(O[0]=U=>o.value=U),onKeyup:fr(h,["enter"]),maxlength:"100"},null,544),[[tt,o.value]]),x("button",{class:"confirm-btn",onClick:h,disabled:!o.value},O[3]||(O[3]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-check"},[x("path",{d:"M20 6 9 17l-5-5"})],-1)]),8,e3)])])]),x("div",t3,[(z(!0),W(_e,null,Ye(oe(t).enums,U=>(z(),W("div",{key:U.name,class:ze(["enum-item",{active:i.value?.name===U.name}]),onClick:X=>p(U)},[x("div",o3,[E(U)?ye((z(),W("input",{key:1,type:"text",class:"enum-name-edit-input","onUpdate:modelValue":O[1]||(O[1]=X=>r.value=X),onClick:O[2]||(O[2]=Do(()=>{},["stop"])),onKeyup:fr(X=>N(U),["enter"]),ref_for:!0,ref_key:"enumNameInput",ref:a,maxlength:"100"},null,40,s3)),[[tt,r.value]]):(z(),W("span",i3,Ae(U.name),1))]),x("div",r3,[x("button",{class:"edit-enum-toggle-btn",onClick:Do(X=>N(U),["stop"])},[E(U)?(z(),W("span",a3,O[4]||(O[4]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save"},[x("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),x("path",{d:"M17 21v-8H7v8"}),x("path",{d:"M7 3v4h6"})],-1)]))):(z(),W("svg",u3,O[5]||(O[5]=[x("path",{d:"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"},null,-1),x("path",{d:"m15 5 4 4"},null,-1)])))],8,l3),x("button",{class:"delete-enum-btn",onClick:Do(X=>b(U),["stop"])},"×",8,c3)])],10,n3))),128))])]),i.value?(z(),W("div",d3,[x("table",f3,[O[7]||(O[7]=x("thead",null,[x("tr",null,[x("th",{class:"name-column"},"Name"),x("th",{class:"value-column"},"Value"),x("th",{class:"action-column"},"Action")])],-1)),x("tbody",null,[(z(!0),W(_e,null,Ye(i.value.values,(U,X)=>(z(),W("tr",{key:X},[x("td",h3,Ae(U.name),1),x("td",p3,Ae(U.value),1),x("td",g3,[x("div",v3,[x("div",{class:"enum-actions",onMouseover:H=>P(X),onMouseleave:H=>g(X)},[O[6]||(O[6]=x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-ellipsis"},[x("circle",{cx:"12",cy:"12",r:"1"}),x("circle",{cx:"19",cy:"12",r:"1"}),x("circle",{cx:"5",cy:"12",r:"1"})],-1)),l.value===X?(z(),W("div",y3,[x("div",{class:"dropdown-item",onClick:H=>c(U)},"Edit",8,_3),x("div",{class:"dropdown-item",onClick:H=>d(U)},"Delete",8,b3)])):Ne("",!0)],40,m3)])])]))),128))])]),x("div",{class:"main-footer"},[x("button",{class:"add-btn",onClick:u},"Add Enum Value")])])):Ne("",!0)]))}}),x3=Xe(w3,[["__scopeId","data-v-c7d104ef"]]),E3={class:"container"},S3={class:"editor-container"},C3={class:"editor-header"},N3={class:"editor-content"},T3=he({__name:"Viewport",setup(e){const t=te("models");return(n,o)=>(z(),W("main",E3,[x("div",S3,[x("div",C3,[x("div",{class:ze(["header-section",{active:t.value==="models"}]),onClick:o[0]||(o[0]=i=>t.value="models")}," Models ",2),o[2]||(o[2]=x("div",{class:"header-divider"},null,-1)),x("div",{class:ze(["header-section",{active:t.value==="enums"}]),onClick:o[1]||(o[1]=i=>t.value="enums")}," Enums ",2)]),x("div",N3,[t.value==="models"?(z(),Re(R4,{key:0})):Ne("",!0),t.value==="enums"?(z(),Re(x3,{key:1})):Ne("",!0)])])]))}}),M3=Xe(T3,[["__scopeId","data-v-b0fef25d"]]),$3={class:"container"},I3=he({__name:"SchemaStep",setup(e){return(t,n)=>(z(),W("main",$3,[n[0]||(n[0]=x("h1",null,"Design your Schema",-1)),n[1]||(n[1]=x("br",null,null,-1)),x("div",null,[Me(M3)])]))}}),k3=Xe(I3,[["__scopeId","data-v-33ee6271"]]),P3={class:"container"},A3={class:"feature-grid"},D3=["onClick"],O3=["innerHTML"],R3={class:"feature-label"},V3=he({__name:"FeatureSelectionStep",setup(e){const t={Databases:[{key:"use_postgres",label:"PostgreSQL",icon:''}],Migrations:[{key:"use_alembic",label:"Alembic",icon:` + + `}],Authentication:[{key:"use_builtin_auth",label:"Built-in Auth",icon:` + + `}],Caching:[{key:"use_redis",label:"Redis",icon:''}],"Message Queues":[{key:"use_rabbitmq",label:"RabbitMQ",icon:' '},{key:"use_taskiq",label:"TaskIQ",icon:` + + `}],Monitoring:[{key:"use_prometheus",label:"Prometheus",icon:` + + + `}],Logging:[{key:"use_logfire",label:"Logfire",icon:` + + `}]},n=go({use_postgres:!1,use_alembic:!1,use_builtin_auth:!1,use_redis:!1,use_rabbitmq:!1,use_taskiq:!1,use_prometheus:!1,use_logfire:!1});function o(i){n[i]=!n[i]}return(i,s)=>(z(),W("main",P3,[s[0]||(s[0]=x("h1",null,"Project Features",-1)),(z(),W(_e,null,Ye(t,(r,l)=>x("section",{key:l,class:"category-section"},[x("h2",null,Ae(l),1),x("div",A3,[(z(!0),W(_e,null,Ye(r,a=>(z(),W("div",{class:ze(["feature-item",{selected:n[a.key]}]),key:a.key,onClick:u=>o(a.key)},[x("div",{class:"feature-icon",innerHTML:a.icon},null,8,O3),x("div",R3,Ae(a.label),1)],10,D3))),128))])])),64))]))}}),B3=Xe(V3,[["__scopeId","data-v-432690c7"]]),L3={class:"container"},F3=he({__name:"GenerationStep",setup(e){const t=_t();return(n,o)=>(z(),W("main",L3,[o[1]||(o[1]=x("h1",null,"Generate",-1)),x("button",{onClick:o[0]||(o[0]=(...i)=>oe(t).callGenerateEndpoint&&oe(t).callGenerateEndpoint(...i))},"GENERATE :P")]))}}),z3=Xe(F3,[["__scopeId","data-v-9243bc5e"]]),H3={class:"modal"},U3={class:"modal-header"},G3={class:"modal-title"},j3={name:"title"},Y3={class:"modal-body"},K3=he({__name:"GlobalModal",setup(e){const t=Wt(),{modalTitle:n,isOpen:o,currentComponent:i,props:s}=Op(t);function r(){t.close()}return(l,a)=>(z(),Re(Hf,{to:"body"},[oe(o)?(z(),W("div",{key:0,class:"modal-backdrop",onClick:Do(r,["self"])},[x("div",H3,[x("div",U3,[x("div",G3,[x("div",j3,Ae(oe(n)),1)]),x("div",{class:"modal-actions",onClick:r},a[0]||(a[0]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-x h-4 w-4"},[x("path",{d:"M18 6 6 18"}),x("path",{d:"m6 6 12 12"})],-1)]))]),x("div",Y3,[oe(i)?(z(),Re(vo(oe(i)),Mn({key:0},oe(s),{onClose:r}),null,16)):Ne("",!0)])])])):Ne("",!0)]))}}),X3=Xe(K3,[["__scopeId","data-v-d61e0035"]]),W3={id:"app"},Z3={class:"main"},q3={class:"content"},J3=he({__name:"App",setup(e){const t=[Xg,ev,k3,B3,z3];return(n,o)=>(z(),W(_e,null,[x("div",W3,[o[0]||(o[0]=Wr('FastAPI Forge',1)),x("main",Z3,[x("div",q3,[Me(Lg,{steps:t})])])]),Me(X3,{ref:"modalRef"},null,512)],64))}}),ul=hc(J3);ul.use($p());const Q3={position:Xo.TOP_CENTER,shareAppContext:!0,containerClassName:"container-class"};ul.use(Pg,Q3);ul.mount("#app"); diff --git a/fastapi_forge/static/assets/index-C3-dGTeK.css b/fastapi_forge/static/assets/index-C3-dGTeK.css new file mode 100644 index 0000000..2e3e2b1 --- /dev/null +++ b/fastapi_forge/static/assets/index-C3-dGTeK.css @@ -0,0 +1 @@ +body{font-family:DM Sans,sans-serif;font-optical-sizing:auto}:root{--color-primary: #5294fd;--color-secondary: #dcebfe;--color-success: #7fbc8c;--color-danger: #ff6b6b;--color-warning: #f5c26b;--color-background: #f4f4f0}.Vue-Toastification__toast{border:2px solid black;border-radius:0!important;color:#000!important;box-shadow:2px 2px!important}.Vue-Toastification__toast--success.container-class{background-color:var(--color-success)}.Vue-Toastification__toast--error.container-class{background-color:var(--color-danger)}.Vue-Toastification__toast--warning.container-class{background-color:var(--color-warning)}.Vue-Toastification__container{z-index:9999;position:fixed;padding:4px;width:600px;box-sizing:border-box;display:flex;min-height:100%;color:#fff;flex-direction:column;pointer-events:none}@media only screen and (min-width : 600px){.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:1em}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:1em;flex-direction:column-reverse}.Vue-Toastification__container.top-left,.Vue-Toastification__container.bottom-left{left:1em}.Vue-Toastification__container.top-left .Vue-Toastification__toast,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast{margin-right:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-left .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast--rtl{margin-right:unset;margin-left:auto}}.Vue-Toastification__container.top-right,.Vue-Toastification__container.bottom-right{right:1em}.Vue-Toastification__container.top-right .Vue-Toastification__toast,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast{margin-left:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-right .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast--rtl{margin-left:unset;margin-right:auto}}.Vue-Toastification__container.top-center,.Vue-Toastification__container.bottom-center{left:50%;margin-left:-300px}.Vue-Toastification__container.top-center .Vue-Toastification__toast,.Vue-Toastification__container.bottom-center .Vue-Toastification__toast{margin-left:auto;margin-right:auto}}@media only screen and (max-width : 600px){.Vue-Toastification__container{width:100vw;padding:0;left:0;margin:0}.Vue-Toastification__container .Vue-Toastification__toast{width:100%}.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:0}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:0;flex-direction:column-reverse}}.Vue-Toastification__toast{display:inline-flex;position:relative;max-height:800px;min-height:64px;box-sizing:border-box;margin-bottom:1rem;padding:22px 24px;border-radius:8px;box-shadow:0 1px 10px #0000001a,0 2px 15px #0000000d;justify-content:space-between;font-family:Lato,Helvetica,Roboto,Arial,sans-serif;max-width:600px;min-width:326px;pointer-events:auto;overflow:hidden;transform:translateZ(0);direction:ltr}.Vue-Toastification__toast--rtl{direction:rtl}.Vue-Toastification__toast--default{background-color:#1976d2;color:#fff}.Vue-Toastification__toast--info{background-color:#2196f3;color:#fff}.Vue-Toastification__toast--success{background-color:#4caf50;color:#fff}.Vue-Toastification__toast--error{background-color:#ff5252;color:#fff}.Vue-Toastification__toast--warning{background-color:#ffc107;color:#fff}@media only screen and (max-width : 600px){.Vue-Toastification__toast{border-radius:0;margin-bottom:.5rem}}.Vue-Toastification__toast-body{flex:1;line-height:24px;font-size:16px;word-break:break-word;white-space:pre-wrap}.Vue-Toastification__toast-component-body{flex:1}.Vue-Toastification__toast.disable-transition{animation:none!important}.Vue-Toastification__close-button{font-weight:700;font-size:24px;line-height:24px;background:transparent;outline:none;border:none;padding:0 0 0 10px;cursor:pointer;transition:.3s ease;align-items:center;color:#fff;opacity:.3;transition:visibility 0s,opacity .2s linear}.Vue-Toastification__close-button:hover,.Vue-Toastification__close-button:focus{opacity:1}.Vue-Toastification__toast:not(:hover) .Vue-Toastification__close-button.show-on-hover{opacity:0}.Vue-Toastification__toast--rtl .Vue-Toastification__close-button{padding-left:unset;padding-right:10px}@keyframes scale-x-frames{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Vue-Toastification__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:10000;background-color:#ffffffb3;transform-origin:left;animation:scale-x-frames linear 1 forwards}.Vue-Toastification__toast--rtl .Vue-Toastification__progress-bar{right:0;left:unset;transform-origin:right}.Vue-Toastification__icon{margin:auto 18px auto 0;background:transparent;outline:none;border:none;padding:0;transition:.3s ease;align-items:center;width:20px;height:100%}.Vue-Toastification__toast--rtl .Vue-Toastification__icon{margin:auto 0 auto 18px}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceOutRight{40%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(1000px,0,0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Vue-Toastification__bounce-enter-active.top-left,.Vue-Toastification__bounce-enter-active.bottom-left{animation-name:bounceInLeft}.Vue-Toastification__bounce-enter-active.top-right,.Vue-Toastification__bounce-enter-active.bottom-right{animation-name:bounceInRight}.Vue-Toastification__bounce-enter-active.top-center{animation-name:bounceInDown}.Vue-Toastification__bounce-enter-active.bottom-center{animation-name:bounceInUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-left,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-left{animation-name:bounceOutLeft}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-right,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-right{animation-name:bounceOutRight}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-center{animation-name:bounceOutUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-center{animation-name:bounceOutDown}.Vue-Toastification__bounce-leave-active,.Vue-Toastification__bounce-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__bounce-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes fadeOutTop{0%{transform:translateY(0);opacity:1}to{transform:translateY(-50px);opacity:0}}@keyframes fadeOutLeft{0%{transform:translate(0);opacity:1}to{transform:translate(-50px);opacity:0}}@keyframes fadeOutBottom{0%{transform:translateY(0);opacity:1}to{transform:translateY(50px);opacity:0}}@keyframes fadeOutRight{0%{transform:translate(0);opacity:1}to{transform:translate(50px);opacity:0}}@keyframes fadeInLeft{0%{transform:translate(-50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInRight{0%{transform:translate(50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInTop{0%{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fadeInBottom{0%{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}.Vue-Toastification__fade-enter-active.top-left,.Vue-Toastification__fade-enter-active.bottom-left{animation-name:fadeInLeft}.Vue-Toastification__fade-enter-active.top-right,.Vue-Toastification__fade-enter-active.bottom-right{animation-name:fadeInRight}.Vue-Toastification__fade-enter-active.top-center{animation-name:fadeInTop}.Vue-Toastification__fade-enter-active.bottom-center{animation-name:fadeInBottom}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-left,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-left{animation-name:fadeOutLeft}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-right,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-right{animation-name:fadeOutRight}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-center{animation-name:fadeOutTop}.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-center{animation-name:fadeOutBottom}.Vue-Toastification__fade-leave-active,.Vue-Toastification__fade-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__fade-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes slideInBlurredLeft{0%{transform:translate(-1000px) scaleX(2.5) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredTop{0%{transform:translateY(-1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredRight{0%{transform:translate(1000px) scaleX(2.5) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredBottom{0%{transform:translateY(1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideOutBlurredTop{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 0%;filter:blur(0);opacity:1}to{transform:translateY(-1000px) scaleY(2) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredBottom{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateY(1000px) scaleY(2) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredLeft{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(-1000px) scaleX(2) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}}@keyframes slideOutBlurredRight{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(1000px) scaleX(2) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}}.Vue-Toastification__slideBlurred-enter-active.top-left,.Vue-Toastification__slideBlurred-enter-active.bottom-left{animation-name:slideInBlurredLeft}.Vue-Toastification__slideBlurred-enter-active.top-right,.Vue-Toastification__slideBlurred-enter-active.bottom-right{animation-name:slideInBlurredRight}.Vue-Toastification__slideBlurred-enter-active.top-center{animation-name:slideInBlurredTop}.Vue-Toastification__slideBlurred-enter-active.bottom-center{animation-name:slideInBlurredBottom}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-left,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-left{animation-name:slideOutBlurredLeft}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-right,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-right{animation-name:slideOutBlurredRight}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-center{animation-name:slideOutBlurredTop}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-center{animation-name:slideOutBlurredBottom}.Vue-Toastification__slideBlurred-leave-active,.Vue-Toastification__slideBlurred-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__slideBlurred-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}.StepWizard[data-v-9f8c12c9]{display:flex;flex-direction:column;align-items:center;height:100%}.step-indicators[data-v-9f8c12c9]{display:flex;justify-content:center;margin-bottom:1rem}.step[data-v-9f8c12c9]{caret-color:transparent;width:50px;height:50px;border-radius:50%;background-color:#d3d3d3;display:flex;align-items:center;justify-content:center;margin:0 5px;cursor:pointer;border:2px solid black;box-shadow:2px 2px #000;transition:transform .1s ease-out,box-shadow .1s}.step[data-v-9f8c12c9]:hover{background-color:#a9a9a9;box-shadow:0 0 #000;transform:translate(2px,2px)}.step.active[data-v-9f8c12c9]{background-color:var(--color-primary)}.step.completed[data-v-9f8c12c9]{background-color:var(--color-success)}.step-content[data-v-9f8c12c9]{margin-bottom:3rem}.step-actions[data-v-9f8c12c9]{display:grid;grid-template-rows:1;grid-template-columns:2;justify-content:space-between;width:10%;position:absolute;bottom:8rem}.prev-btn[data-v-9f8c12c9]{grid-column:1}.next-btn[data-v-9f8c12c9]{grid-column:2}.next-btn[data-v-9f8c12c9],.prev-btn[data-v-9f8c12c9],.finish-btn[data-v-9f8c12c9]{caret-color:transparent;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-background);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s;font-weight:700}.next-btn[data-v-9f8c12c9]:hover,.prev-btn[data-v-9f8c12c9]:hover,.finish-btn[data-v-9f8c12c9]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer}.project-name[data-v-cad93208]{width:100%;padding:.5rem;border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.project-name[data-v-cad93208]:focus,.project-name.confirmed[data-v-cad93208]{outline:none;transform:translate(2px,2px);box-shadow:0 0 #000}.project-name.confirmed[data-v-cad93208]{cursor:not-allowed}.input-group[data-v-cad93208]{display:flex;flex-direction:column;gap:.1rem;margin-bottom:1rem;width:100%}.project-name-label[data-v-cad93208]{font-weight:700;margin-bottom:.25rem}.input-horizontal[data-v-cad93208]{display:flex;align-items:center;gap:.5rem}.confirm-btn[data-v-cad93208]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-background);padding:.25rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;height:2.125rem;font-weight:700}.confirm-btn[data-v-cad93208]:hover,.confirm-btn.confirmed[data-v-cad93208]{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s;background-color:var(--color-success)}.confirm-btn.confirmed[data-v-cad93208]{transition:.1s;background-color:var(--color-success)}.confirm-btn.confirmed[data-v-cad93208]:hover{background-color:var(--color-background);transform:translate(0);box-shadow:3px 3px #000}.label-group[data-v-cad93208]{display:flex;justify-content:space-between;align-items:center}.input-error[data-v-cad93208]{border-color:#f44;background-color:#fee}.error-message[data-v-cad93208]{color:#ff4910;font-size:.8rem;margin-top:.25rem}.confirm-btn[data-v-cad93208]:disabled{opacity:.6;cursor:not-allowed;background-color:var(--color-background)}.container[data-v-cad93208],.container[data-v-9256ee53]{display:flex;flex-direction:column;align-items:center;width:100%;max-width:360px;min-width:360px}.db-grid-container[data-v-9256ee53]{width:100%;display:flex;justify-content:center}.db-grid[data-v-9256ee53]{display:grid;grid-template-columns:repeat(3,100px);gap:3rem;justify-items:center}.db-item[data-v-9256ee53]{caret-color:transparent;border:2px solid black;font-weight:700;border-radius:4px;box-shadow:3px 3px #000;padding:1rem;text-align:center;width:100px;height:100px;display:flex;align-items:center;justify-content:center;background-color:var(--color-background);transition:all .1s ease-in-out}.db-item.enabled[data-v-9256ee53]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;background-color:var(--color-success)}.db-item.enabled.confirmed[data-v-9256ee53]{transform:translate(2px,2px);box-shadow:0 0 #000;background-color:var(--color-success)}.db-item.enabled.confirmed[data-v-9256ee53]:hover{background-color:var(--color-background);transform:translate(0);box-shadow:3px 3px #000}.db-item.disabled[data-v-9256ee53]{opacity:.6;background-color:#e0e0e0;cursor:not-allowed;box-shadow:none}.db-item.disabled[data-v-9256ee53]:hover{transform:none;box-shadow:none}.custom-node[data-v-b7467be7]{border:2px solid black;border-radius:6px;width:250px;overflow:hidden;background-color:#fff}.custom-node-header[data-v-b7467be7]{display:flex;justify-content:space-between;align-items:center;border-bottom:2px solid black;width:100%;height:32px}.custom-node-title[data-v-b7467be7]{font-weight:700;background-color:var(--color-primary);width:100%;height:100%;display:flex;align-items:center;padding:0 8px}.custom-node-actions[data-v-b7467be7]{cursor:pointer;width:40px;height:100%;display:flex;align-items:center;justify-content:center;border-left:2px solid black;background-color:var(--color-primary)}.custom-node-body[data-v-b7467be7]{display:flex;flex-direction:column;cursor:pointer}.custom-node-field-row[data-v-b7467be7]{display:flex;justify-content:space-between;align-items:center;height:28px;padding:0 8px;border-bottom:1px solid #e0e0e0}.custom-node-field-row[data-v-b7467be7]:hover{background-color:#f8f8f8}.custom-node-field-row[data-v-b7467be7]:last-child{border-bottom:none}.custom-node-field-name[data-v-b7467be7]{font-weight:600;color:#343a40;white-space:nowrap;overflow:hidden}.custom-node-field-type[data-v-b7467be7]{font-style:italic;color:#6c757d;white-space:nowrap}.dropdown-list[data-v-b7467be7]{margin-left:160px;caret-color:transparent;border:2px solid black;position:absolute;width:100%;min-width:120px;max-width:140px;border-radius:5px;background:#fff;z-index:100;padding:4px;box-sizing:border-box}.dropdown-item[data-v-b7467be7]{height:35px;width:100%;display:flex;align-items:center;padding:0 5px;box-sizing:border-box;border:2px solid transparent;border-radius:5px}.dropdown-item[data-v-b7467be7]:hover{border:2px solid black;cursor:pointer}.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-textbg{fill:#fff}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{border-width:1px;border-style:solid;border-color:#bbb}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}.field-modal-container[data-v-957caa91]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-957caa91]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-957caa91]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-957caa91]{font-weight:700;margin-bottom:5px}.field-input[data-v-957caa91],.field-select[data-v-957caa91]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-957caa91]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-957caa91]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-957caa91]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-957caa91]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.field-modal-container[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-d1c2c65c]{font-weight:700;margin-bottom:5px}.field-input[data-v-d1c2c65c],.field-select[data-v-d1c2c65c]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-d1c2c65c]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.delete-field-btn[data-v-d1c2c65c]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-danger);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.delete-field-btn[data-v-d1c2c65c]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.save-field-btn[data-v-d1c2c65c]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-d1c2c65c]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.relation-container[data-v-de485ddf]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-de485ddf]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-de485ddf]{display:flex;flex-direction:column;gap:.15rem}.relation-label[data-v-de485ddf]{font-weight:700;margin-bottom:5px}.relation-input[data-v-de485ddf],.relation-select[data-v-de485ddf]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-de485ddf]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-de485ddf]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-relation-btn[data-v-de485ddf]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-relation-btn[data-v-de485ddf]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.delete-relation-btn[data-v-de485ddf]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-danger);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.delete-relation-btn[data-v-de485ddf]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.relation-container[data-v-074cc5ca]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-074cc5ca]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-074cc5ca]{display:flex;flex-direction:column;gap:.15rem}.relation-label[data-v-074cc5ca]{font-weight:700;margin-bottom:5px}.relation-input[data-v-074cc5ca],.relation-select[data-v-074cc5ca]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-074cc5ca]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-074cc5ca]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-relation-btn[data-v-074cc5ca]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-relation-btn[data-v-074cc5ca]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.rename-node-modal[data-v-7350b5ff]{display:flex;flex-direction:column;padding:1rem}.input-container[data-v-7350b5ff],.input-group[data-v-7350b5ff]{display:flex;flex-direction:column}.field-label[data-v-7350b5ff]{font-weight:700;margin-bottom:5px}.field-input[data-v-7350b5ff]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-7350b5ff]{margin-top:.5rem;display:flex;flex-direction:column}.save-btn[data-v-7350b5ff]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-btn[data-v-7350b5ff]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.vue-flow-container[data-v-87b25a7b]{height:100%;display:flex}.vue-flow-viewport[data-v-87b25a7b]{position:relative;flex:1;display:flex}.viewport-wrapper[data-v-87b25a7b]{width:100%;height:100%}.toggle-grid-button[data-v-87b25a7b]{caret-color:transparent;position:absolute;top:10px;right:10px;background-color:var(--color-primary);color:#000;border:2px solid black;padding:3px 6px;font-weight:700;border-radius:8px;cursor:pointer;z-index:10;box-shadow:2px 2px #000}.toggle-grid-button[data-v-87b25a7b]:hover{box-shadow:0 0 #000;transform:translate(2px,2px)}.create-wrapper[data-v-87b25a7b]{position:absolute;top:10px;left:10px;display:flex;align-items:center}.create-circle[data-v-87b25a7b]{width:40px;height:40px;background-color:var(--color-primary);border:2px solid black;color:#000;border-radius:50%;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:700;z-index:10;box-shadow:2px 2px #000}.create-circle[data-v-87b25a7b]:hover{box-shadow:0 0 #000;transform:translate(2px,2px)}.floating-create-expanded[data-v-87b25a7b]{display:flex;align-items:center;background:var(--color-primary);border:2px solid black;border-radius:50px;height:40px;padding:0 10px;gap:8px;z-index:1000;margin-top:2px;margin-left:2px}.collapse-btn[data-v-87b25a7b]{display:grid;place-items:center;width:24px;height:24px;padding:0;cursor:pointer;background:none;border:none}.collapse-btn svg[data-v-87b25a7b]{width:20px;height:20px}.create-model-input[data-v-87b25a7b]{height:26px;border:2px solid black;border-radius:6px;padding:0 10px;width:160px}.create-model-btn[data-v-87b25a7b]{height:30px;border:2px solid black;border-radius:6px;cursor:pointer;font-weight:700;background-color:var(--color-secondary);margin-right:5px}.create-model-btn[data-v-87b25a7b]:hover{background-color:var(--color-success)}.field-modal-container[data-v-33da89f7]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-33da89f7]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-33da89f7]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-33da89f7]{font-weight:700;margin-bottom:5px}.field-input[data-v-33da89f7]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-33da89f7]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-33da89f7]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-33da89f7]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.field-modal-container[data-v-08474887]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-08474887]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-08474887]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-08474887]{font-weight:700;margin-bottom:5px}.field-input[data-v-08474887]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-08474887]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-08474887]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-08474887]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.layout-container[data-v-c7d104ef]{display:flex;height:100%;min-height:0}.enum-sidebar[data-v-c7d104ef]{width:250px;border-right:2px solid black;display:flex;flex-direction:column;background-color:#fff}.enum-list[data-v-c7d104ef]{flex:1;padding:5px;overflow-y:auto}.enum-item[data-v-c7d104ef]{padding:10px 15px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;border-radius:8px;border:2px solid transparent}.enum-item.active[data-v-c7d104ef],.enum-item[data-v-c7d104ef]:hover{background-color:var(--color-primary);font-weight:700;border-color:#000}.enum-name-wrapper[data-v-c7d104ef]{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:8px}.enum-name-edit-input[data-v-c7d104ef]{width:100%;background:none;border:2px solid black;border-radius:4px;padding:2px 5px;box-sizing:border-box;background-color:#fff}.enum-item-actions[data-v-c7d104ef]{display:flex;gap:0;align-items:center}.edit-enum-toggle-btn[data-v-c7d104ef]{background:none;border:none;font-size:16px;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px}.edit-enum-toggle-btn[data-v-c7d104ef]:hover{color:var(--color-success)}.delete-enum-btn[data-v-c7d104ef]{background:none;border:none;font-size:18px;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.delete-enum-btn[data-v-c7d104ef]:hover{color:red}.main-header[data-v-c7d104ef]{height:50px;border-bottom:2px solid black;position:sticky;top:0;background-color:inherit;z-index:1;display:flex;justify-content:space-between;align-items:center;padding:0 15px}.enum-title[data-v-c7d104ef]{font-size:1.2rem;font-weight:700}.main-content[data-v-c7d104ef]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.main-table[data-v-c7d104ef]{width:100%;border-collapse:collapse;display:flex;flex-direction:column;flex:1;min-height:0}.main-table thead[data-v-c7d104ef]{display:table;width:100%;table-layout:fixed}.main-table tbody[data-v-c7d104ef]{display:block;overflow-y:auto;flex:1;width:100%}.main-table tr[data-v-c7d104ef]{display:table;width:100%;table-layout:fixed}.main-table th[data-v-c7d104ef],.main-table td[data-v-c7d104ef]{padding:16px;text-align:left;border-bottom:2px solid black}.action-column[data-v-c7d104ef]{width:20%;text-align:right!important}.action-content[data-v-c7d104ef]{margin-right:15px}.enum-actions[data-v-c7d104ef]{cursor:pointer;display:flex;justify-content:flex-end;position:relative}.dropdown-list[data-v-c7d104ef]{position:absolute;border:2px solid black;border-radius:5px;background:#fff;z-index:100;padding:4px;left:0;min-width:100px}.dropdown-item[data-v-c7d104ef]{height:35px;width:100%;display:flex;align-items:center;padding:0 5px;box-sizing:border-box;border:2px solid transparent;border-radius:5px}.dropdown-item[data-v-c7d104ef]:hover{border:2px solid black;cursor:pointer}.main-footer[data-v-c7d104ef]{height:50px;border-top:2px solid black;position:sticky;bottom:0;padding:0 15px;display:flex;align-items:center;justify-content:flex-end}.input-group[data-v-c7d104ef]{display:flex;flex-direction:column;gap:.1rem;padding:10px}.project-name-label[data-v-c7d104ef]{font-weight:700;margin-bottom:.25rem}.input-horizontal[data-v-c7d104ef]{display:flex;align-items:center;gap:.5rem}.confirm-btn[data-v-c7d104ef]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-background);padding:.25rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;height:2.125rem;font-weight:700}.confirm-btn[data-v-c7d104ef]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s;background-color:var(--color-success)}.confirm-btn[data-v-c7d104ef]:disabled{opacity:.6;cursor:not-allowed;background-color:var(--color-background)}.project-name[data-v-c7d104ef]{width:100%;padding:.5rem;border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.project-name[data-v-c7d104ef]:focus{outline:none;transform:translate(2px,2px);box-shadow:0 0 #000}.label-group[data-v-c7d104ef]{display:flex;justify-content:space-between;align-items:center}.add-btn[data-v-c7d104ef]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-success);padding:.5rem 1rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;font-weight:700}.add-btn[data-v-c7d104ef]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s}.container[data-v-b0fef25d]{width:100%;height:100vh;display:flex;justify-content:center;align-items:center;background-color:#fff}.editor-container[data-v-b0fef25d]{width:1000px;height:500px;background-color:#fff;border:2px solid black;display:flex;flex-direction:column;overflow:hidden}.editor-header[data-v-b0fef25d]{height:40px;display:flex;align-items:center;background-color:var(--color-primary);width:100%;border-bottom:2px solid black;box-sizing:border-box}.header-section[data-v-b0fef25d]{flex:1;text-align:center;cursor:pointer;font-weight:700;display:flex;align-items:center;justify-content:center;height:100%;-webkit-user-select:none;user-select:none}.header-divider[data-v-b0fef25d]{width:2px;height:100%;background-color:#000}.editor-content[data-v-b0fef25d]{position:relative;flex:1;width:100%;height:calc(100% - 40px)}.container[data-v-33ee6271]{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:column}.container[data-v-432690c7]{min-width:600px;margin:0 auto;font-family:Arial,sans-serif;padding:1rem}h1[data-v-432690c7]{text-align:center;margin-bottom:2rem;font-weight:700}.category-section[data-v-432690c7]{margin-bottom:2rem}.category-section h2[data-v-432690c7]{margin-bottom:1rem;font-size:1.3rem;font-weight:700}.feature-grid[data-v-432690c7]{display:grid;grid-template-columns:repeat(3,100px);gap:2rem 2rem;justify-content:start}.feature-item[data-v-432690c7]{border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;width:100px;height:100px;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer;background-color:var(--color-background, white);transition:all .1s ease-in-out;-webkit-user-select:none;user-select:none;text-align:center;padding:.5rem}.feature-item[data-v-432690c7]:hover,.feature-item.selected[data-v-432690c7]{transform:translate(2px,2px);box-shadow:none;background-color:var(--color-success, #4caf50);color:#fff}.feature-item.selected[data-v-432690c7]:hover{background-color:var(--color-background, white);color:#000;transform:translate(0);box-shadow:3px 3px #000}.feature-icon[data-v-432690c7]{margin-bottom:.25rem}.feature-label[data-v-432690c7]{font-size:.8rem;font-weight:700;line-height:1.1}.container[data-v-9243bc5e]{display:flex;flex-direction:column;align-items:center;width:100%;max-width:360px;min-width:360px}.modal-backdrop[data-v-d61e0035]{position:fixed;inset:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal[data-v-d61e0035]{border:2px solid black;border-radius:6px;overflow:hidden;background-color:#fff;max-width:350px;width:100%;margin:0 1rem;display:flex;flex-direction:column;background-color:var(--color-secondary)}.modal-header[data-v-d61e0035]{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem}.modal-title[data-v-d61e0035]{font-weight:700;flex-grow:1;display:flex;align-items:center;font-size:1rem}.modal-actions[data-v-d61e0035]{cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.modal-body[data-v-d61e0035]{overflow:hidden;background-color:var(--color-secondary)}html,body{height:100%;margin:0}#app{display:flex;flex-direction:column;height:100%;background-color:var(--color-background)}.header{height:60px;position:sticky;flex-shrink:0;background-color:#fff;border-bottom:4px solid black;top:0;display:flex;align-items:center}.content{flex-grow:1;padding:1rem}.logo{display:flex;align-items:center;gap:.5rem;margin-left:1rem}.github-icon{width:20px;height:20px;border:2px solid black;border-radius:15%;padding:.25rem;box-shadow:2px 2px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.github-icon:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer}.github-icon:visited,.github-icon:active,.github-icon:focus{color:#000} diff --git a/fastapi_forge/static/favicon.ico b/fastapi_forge/static/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/fastapi_forge/static/favicon.ico differ diff --git a/fastapi_forge/static/index.html b/fastapi_forge/static/index.html new file mode 100644 index 0000000..be1c913 --- /dev/null +++ b/fastapi_forge/static/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Vite App + + + + + + + + diff --git a/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml b/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml index 3e938e6..752d437 100644 --- a/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml +++ b/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml @@ -142,4 +142,4 @@ show_error_codes = true implicit_reexport = true disable_error_code = ["prop-decorator", "override", "import-untyped"] plugins = ["pydantic.mypy", {% if cookiecutter.use_postgres -%}"sqlalchemy.ext.mypy.plugin"{% endif %}] -exclude = ["migrations"] +exclude = ["migrations"] \ No newline at end of file diff --git a/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py b/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py index a1f1829..59ddb94 100644 --- a/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py +++ b/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py @@ -16,14 +16,15 @@ class HTTPBearer(_HTTPBearer): Returns access token as str. """ - async def __call__(self, request: Request) -> str | None: # type: ignore + async def __call__(self, request: Request) -> str | None: """Return access token.""" try: obj = await super().__call__(request) - return obj.credentials if obj else None - except HTTPException: + except HTTPException as err: msg = "Missing token." - raise exceptions.Http401(msg) + raise exceptions.Http401(msg) from err + else: + return obj.credentials if obj else None auth_scheme = HTTPBearer() diff --git a/fastapi_forge/type_info_registry.py b/fastapi_forge/type_info_registry.py index dc0fcec..f4d29c6 100644 --- a/fastapi_forge/type_info_registry.py +++ b/fastapi_forge/type_info_registry.py @@ -5,6 +5,7 @@ from pydantic.dataclasses import dataclass from fastapi_forge.enums import FieldDataTypeEnum +from fastapi_forge.logger import logger EnumName = Annotated[str, Field(...)] @@ -48,9 +49,10 @@ def __init__(self) -> None: def register(self, key: T, data_type: TypeInfo) -> None: if key in self: - raise KeyError( + logger.error( f"{self.__class__.__name__}: Key '{key}' is already registered." ) + return self._registry[key] = data_type def get(self, key: T) -> TypeInfo: diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..86c2b2c --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,9 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +end_of_line = lf +max_line_length = 80 diff --git a/frontend/.gitattributes b/frontend/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/frontend/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/frontend/.prettierrc.json b/frontend/.prettierrc.json new file mode 100644 index 0000000..08e40b6 --- /dev/null +++ b/frontend/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "singleQuote": false, + "printWidth": 100 +} diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..c92168f --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode" + ] +} diff --git a/fastapi_forge/frontend/__init__.py b/frontend/README.md similarity index 100% rename from fastapi_forge/frontend/__init__.py rename to frontend/README.md diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/eslint.config.ts b/frontend/eslint.config.ts new file mode 100644 index 0000000..20475f8 --- /dev/null +++ b/frontend/eslint.config.ts @@ -0,0 +1,22 @@ +import { globalIgnores } from 'eslint/config' +import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' +import pluginVue from 'eslint-plugin-vue' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: +// import { configureVueProject } from '@vue/eslint-config-typescript' +// configureVueProject({ scriptLangs: ['ts', 'tsx'] }) +// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + skipFormatting, +) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..1ba50ec --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Vite App + + + + + + + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..7ba709a --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5365 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@vue-flow/background": "^1.3.2", + "@vue-flow/core": "^1.45.0", + "cytoscape": "^3.32.1", + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-toastification": "^2.0.0-rc.5" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "^7.0.0", + "vite-plugin-vue-devtools": "^7.7.7", + "vue-tsc": "^2.2.10" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", + "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tsconfig/node22": { + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.2.tgz", + "integrity": "sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", + "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", + "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.19" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-flow/background": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@vue-flow/background/-/background-1.3.2.tgz", + "integrity": "sha512-eJPhDcLj1wEo45bBoqTXw1uhl0yK2RaQGnEINqvvBsAFKh/camHJd5NPmOdS1w+M9lggc9igUewxaEd3iCQX2w==", + "license": "MIT", + "peerDependencies": { + "@vue-flow/core": "^1.23.0", + "vue": "^3.3.0" + } + }, + "node_modules/@vue-flow/core": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@vue-flow/core/-/core-1.45.0.tgz", + "integrity": "sha512-+Qd4fTnCfrhfYQzlHyf5Jt7rNE4PlDnEJEJZH9v6hDZoTOeOy1RhS85cSxKYxdsJ31Ttj2v3yabhoVfBf+bmJA==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "^10.5.0", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz", + "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz", + "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "@vue/babel-helper-vue-transform-on": "1.4.0", + "@vue/babel-plugin-resolve-type": "1.4.0", + "@vue/shared": "^3.5.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz", + "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/parser": "^7.26.9", + "@vue/compiler-sfc": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.7.tgz", + "integrity": "sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "mitt": "^3.0.1", + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.2.0.tgz", + "integrity": "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.2" + }, + "peerDependencies": { + "eslint": ">= 8.21.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.6.0.tgz", + "integrity": "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.35.1", + "fast-glob": "^3.3.3", + "typescript-eslint": "^8.35.1", + "vue-eslint-parser": "^10.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0", + "eslint-plugin-vue": "^9.28.0 || ^10.0.0", + "typescript": ">=4.8.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "vue": "3.5.18" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", + "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.1.tgz", + "integrity": "sha512-dbeqFTLYEwlFg7UGtcZhCCG/2WayX72zK3Sq323CEX29CY81tYfVhw1MIdduCtpstB0cTOhJswWlM/OEB3Xp+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.190", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.190.tgz", + "integrity": "sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.31.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.2.0.tgz", + "integrity": "sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.0.tgz", + "integrity": "sha512-NWDAhdnATItTnRhip9VTd8oXDjVcbhetRN6YzckApnXGxpGUooKMAaf0KVvlZG0+KlJMGkeLElVn4M1ReuxKUQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-all2": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-8.0.4.tgz", + "integrity": "sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.6", + "memorystream": "^0.3.1", + "picomatch": "^4.0.2", + "pidtree": "^0.6.0", + "read-package-json-fast": "^4.0.0", + "shell-quote": "^1.7.3", + "which": "^5.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^20.5.0 || >=22.0.0", + "npm": ">= 10" + } + }, + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm-run-all2/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm-run-all2/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm-run-all2/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.7.tgz", + "integrity": "sha512-d0fIh3wRcgSlr4Vz7bAk4va1MkdqhQgj9ANE/rBhsAjOnRfTLs2ocjFMvSUOsv6SRRXU9G+VM7yMgqDb6yI4iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^7.7.7", + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "execa": "^9.5.2", + "sirv": "^3.0.1", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz", + "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-toastification": { + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", + "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.2" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..97f7b8e --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,40 @@ +{ + "name": "frontend", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build", + "lint": "eslint . --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "@vue-flow/background": "^1.3.2", + "@vue-flow/core": "^1.45.0", + "cytoscape": "^3.32.1", + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-toastification": "^2.0.0-rc.5" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "^7.0.0", + "vite-plugin-vue-devtools": "^7.7.7", + "vue-tsc": "^2.2.10" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/frontend/public/favicon.ico differ diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..a5733c9 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,107 @@ + + + + + FastAPI Forge + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css new file mode 100644 index 0000000..e5e2536 --- /dev/null +++ b/frontend/src/assets/main.css @@ -0,0 +1,32 @@ +body { + font-family: "DM Sans", sans-serif; + font-optical-sizing: auto; +} + +:root { + --color-primary: #5294fd; + --color-secondary: #dcebfe; + --color-success: #7fbc8c; + --color-danger: #ff6b6b; + --color-warning: #f5c26b; + --color-background: #f4f4f0; +} + +.Vue-Toastification__toast { + border: 2px solid black; + border-radius: 0px !important; + color: black !important; + box-shadow: 2px 2px 0px !important; +} + +.Vue-Toastification__toast--success.container-class { + background-color: var(--color-success); +} + +.Vue-Toastification__toast--error.container-class { + background-color: var(--color-danger); +} + +.Vue-Toastification__toast--warning.container-class { + background-color: var(--color-warning); +} diff --git a/frontend/src/components/StepWizard.vue b/frontend/src/components/StepWizard.vue new file mode 100644 index 0000000..61b73eb --- /dev/null +++ b/frontend/src/components/StepWizard.vue @@ -0,0 +1,141 @@ + + + + + + + + + + + + Previous + + Next + + + + + + + + diff --git a/frontend/src/components/ValidatedInput.vue b/frontend/src/components/ValidatedInput.vue new file mode 100644 index 0000000..7ad03d6 --- /dev/null +++ b/frontend/src/components/ValidatedInput.vue @@ -0,0 +1,90 @@ + + + {{ label }} + + + + {{ error }} + + + + + + diff --git a/frontend/src/components/modal/AddEnumValueModal.vue b/frontend/src/components/modal/AddEnumValueModal.vue new file mode 100644 index 0000000..f340cfe --- /dev/null +++ b/frontend/src/components/modal/AddEnumValueModal.vue @@ -0,0 +1,107 @@ + + + + + Name + + + + + Value + + + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/AddFieldModal.vue b/frontend/src/components/modal/AddFieldModal.vue new file mode 100644 index 0000000..ce6aec5 --- /dev/null +++ b/frontend/src/components/modal/AddFieldModal.vue @@ -0,0 +1,224 @@ + + + + + Field name + + + + + Type + + -- Select type -- + String + Int + UUID + DateTime + Boolean + Float + Enum + + + + + Select Enum + + -- Select Enum -- + + {{ e.name }} + + + + + + Default value + + + + {{ v.name }} + + + + + + + + Primary key + Nullable + Unique + Index + + + + Timestamp + Created + Updated + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/AddRelationModal.vue b/frontend/src/components/modal/AddRelationModal.vue new file mode 100644 index 0000000..0263e73 --- /dev/null +++ b/frontend/src/components/modal/AddRelationModal.vue @@ -0,0 +1,154 @@ + + + + + Field name + + + + + Target model + + -- Select a model -- + + {{ node.id }} + + + + + + OnDelete + + -- Select behavior -- + CASCADE + SET_NULL + + + + + Back populates + + + + + + Nullable + Unique + Index + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/EditEnumValueModal.vue b/frontend/src/components/modal/EditEnumValueModal.vue new file mode 100644 index 0000000..ebf42f3 --- /dev/null +++ b/frontend/src/components/modal/EditEnumValueModal.vue @@ -0,0 +1,111 @@ + + + + + Name + + + + + Value + + + + + + Save + + + + + + + + +function showDangerToast(modelName: any) { throw new Error("Function not implemented."); } diff --git a/frontend/src/components/modal/EditFieldModal.vue b/frontend/src/components/modal/EditFieldModal.vue new file mode 100644 index 0000000..ed4fab2 --- /dev/null +++ b/frontend/src/components/modal/EditFieldModal.vue @@ -0,0 +1,269 @@ + + + + + Field name + + + + + Type + + -- Select type -- + String + Int + UUID + DateTime + Boolean + Float + Enum + + + + + Select Enum + + -- Select Enum -- + + {{ e.name }} + + + + + + Default value + + + + {{ v.name }} + + + + + + + + Primary key + Nullable + Unique + Index + + + + Timestamp + Created + Updated + + + + Save + Delete + + + + + + + diff --git a/frontend/src/components/modal/EditRelationModal.vue b/frontend/src/components/modal/EditRelationModal.vue new file mode 100644 index 0000000..7a3adfa --- /dev/null +++ b/frontend/src/components/modal/EditRelationModal.vue @@ -0,0 +1,192 @@ + + + + + Field name + + + + + Target model + + -- Select a model -- + + {{ node.id }} + + + + + + OnDelete + + -- Select behavior -- + CASCADE + SET_NULL + + + + + Back populates + + + + + + Nullable + Unique + Index + + + + Delete + Save + + + + + + + diff --git a/frontend/src/components/modal/GlobalModal.vue b/frontend/src/components/modal/GlobalModal.vue new file mode 100644 index 0000000..f7eec03 --- /dev/null +++ b/frontend/src/components/modal/GlobalModal.vue @@ -0,0 +1,102 @@ + + + + + + + {{ modalTitle }} + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/modal/RenameNodeModal.vue b/frontend/src/components/modal/RenameNodeModal.vue new file mode 100644 index 0000000..2c68551 --- /dev/null +++ b/frontend/src/components/modal/RenameNodeModal.vue @@ -0,0 +1,100 @@ + + + + + New model name + + + + + + Rename + + + + + + + diff --git a/frontend/src/components/schema_editor/CustomNode.vue b/frontend/src/components/schema_editor/CustomNode.vue new file mode 100644 index 0000000..c04a937 --- /dev/null +++ b/frontend/src/components/schema_editor/CustomNode.vue @@ -0,0 +1,181 @@ + + + + + {{ id }} + + + + + + + + + Add Field + Add Relation + Rename + Delete + + + + + + {{ field.name }} + {{ field.type }} + {{ field.type }}({{ field.typeEnum }}) + + + {{ relation.fieldName }} + {{ relation.targetModel }} + + + + + + + + diff --git a/frontend/src/components/schema_editor/EnumEditor.vue b/frontend/src/components/schema_editor/EnumEditor.vue new file mode 100644 index 0000000..f1f6180 --- /dev/null +++ b/frontend/src/components/schema_editor/EnumEditor.vue @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + {{ enumItem.name }} + + + + + + + + + + + + + + + + + × + + + + + + + + + Name + Value + Action + + + + + {{ ev.name }} + {{ ev.value }} + + + + + + + + + + Edit + Delete + + + + + + + + + + + + + + + diff --git a/frontend/src/components/schema_editor/SchemaEditor.vue b/frontend/src/components/schema_editor/SchemaEditor.vue new file mode 100644 index 0000000..f0d22b9 --- /dev/null +++ b/frontend/src/components/schema_editor/SchemaEditor.vue @@ -0,0 +1,260 @@ + + + + + # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/schema_editor/Viewport.vue b/frontend/src/components/schema_editor/Viewport.vue new file mode 100644 index 0000000..428b133 --- /dev/null +++ b/frontend/src/components/schema_editor/Viewport.vue @@ -0,0 +1,92 @@ + + + + + + Models + + + + Enums + + + + + + + + + + + + + + diff --git a/frontend/src/components/steps/DatabaseStep.vue b/frontend/src/components/steps/DatabaseStep.vue new file mode 100644 index 0000000..cb39d73 --- /dev/null +++ b/frontend/src/components/steps/DatabaseStep.vue @@ -0,0 +1,114 @@ + + + Choose a Database + + + + + {{ db }} + + + + + + + + + diff --git a/frontend/src/components/steps/FeatureSelectionStep.vue b/frontend/src/components/steps/FeatureSelectionStep.vue new file mode 100644 index 0000000..0e23489 --- /dev/null +++ b/frontend/src/components/steps/FeatureSelectionStep.vue @@ -0,0 +1,193 @@ + + + Project Features + + + {{ category }} + + + + {{ feature.label }} + + + + + + + + + diff --git a/frontend/src/components/steps/GenerationStep.vue b/frontend/src/components/steps/GenerationStep.vue new file mode 100644 index 0000000..7581f19 --- /dev/null +++ b/frontend/src/components/steps/GenerationStep.vue @@ -0,0 +1,25 @@ + + + Generate + GENERATE :P + + + + + + + diff --git a/frontend/src/components/steps/ProjectNameStep.vue b/frontend/src/components/steps/ProjectNameStep.vue new file mode 100644 index 0000000..6ceb2e3 --- /dev/null +++ b/frontend/src/components/steps/ProjectNameStep.vue @@ -0,0 +1,184 @@ + + + Choose a Project Name + + + + Project Name + + + + + Confirm + + + + {{ errorMessage }} + + + + + + + + diff --git a/frontend/src/components/steps/SchemaStep.vue b/frontend/src/components/steps/SchemaStep.vue new file mode 100644 index 0000000..b9ac90c --- /dev/null +++ b/frontend/src/components/steps/SchemaStep.vue @@ -0,0 +1,24 @@ + + + Design your Schema + + + + + + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..f1dba80 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,21 @@ +import "./assets/main.css" +import "vue-toastification/dist/index.css" + +import { createApp } from "vue" +import { createPinia } from "pinia" +import Toast, { POSITION, type PluginOptions } from "vue-toastification" +import App from "./App.vue" + +const app = createApp(App) + +app.use(createPinia()) + +const options: PluginOptions = { + position: POSITION.TOP_CENTER, + shareAppContext: true, + containerClassName: "container-class", +} + +app.use(Toast, options) + +app.mount("#app") diff --git a/frontend/src/stores/useModalStore.ts b/frontend/src/stores/useModalStore.ts new file mode 100644 index 0000000..a7246c0 --- /dev/null +++ b/frontend/src/stores/useModalStore.ts @@ -0,0 +1,32 @@ +import { defineStore } from "pinia" +import { ref, shallowRef, markRaw, type Component } from "vue" + +export const useModalStore = defineStore("modal", () => { + const isOpen = ref(false) + const modalTitle = ref("") + const currentComponent = shallowRef(null) + const props = ref>({}) + + function open(title: string, component: Component, componentProps: Record = {}) { + currentComponent.value = markRaw(component) + props.value = componentProps + modalTitle.value = title + isOpen.value = true + } + + function close() { + isOpen.value = false + currentComponent.value = null + props.value = {} + modalTitle.value = "" + } + + return { + isOpen, + modalTitle, + currentComponent, + props, + open, + close, + } +}) diff --git a/frontend/src/stores/useProjectStore.ts b/frontend/src/stores/useProjectStore.ts new file mode 100644 index 0000000..d06c430 --- /dev/null +++ b/frontend/src/stores/useProjectStore.ts @@ -0,0 +1,419 @@ +import { defineStore } from "pinia" +import { ref } from "vue" +import type { Ref } from "vue" +import type { + NodesArray, + EdgesArray, + EnumsArray, + NodeT, + EdgeT, + RelationalField, + RelationalRelationField, + EnumValue, + EnumT, +} from "@/types/types.ts" + +export const useProjectStore = defineStore("projectSpec", () => { + const projectSpec = ref({ project_name: "asd", database: "", models: [], custom_enums: [] }) + const isProjectNameConfirmed = ref(false) + + const enums: Ref = ref([ + { + name: "UserRole", + values: [ + { name: "ADMIN", value: "ADMIN" }, + { name: "USER", value: "auto()" }, + ], + }, + ]) + + const nodes: Ref = ref([ + { + id: "user", + data: { + fields: [ + { name: "id", type: "UUID", isPrimaryKey: true, defaultValue: "uuid.uuid4" }, + { name: "name", type: "String" }, + { name: "email", type: "String" }, + { name: "role", type: "Enum", typeEnum: "UserRole", defaultValue: "ADMIN" }, + { name: "created_at", type: "DateTime" }, + { name: "updated_at", type: "DateTime" }, + ], + relations: [ + { + fieldName: "post_id", + targetModel: "post", + onDelete: "CASCADE", + isNullable: false, + isUnique: false, + isIndex: false, + }, + ], + }, + type: "custom", + position: { x: 50, y: 50 }, + }, + { + id: "post", + data: { + fields: [ + { name: "id", type: "UUID", isPrimaryKey: true, defaultValue: "uuid.uuid4" }, + { name: "created_at", type: "DateTime" }, + { name: "updated_at", type: "DateTime" }, + ], + relations: [], + }, + type: "custom", + position: { x: 150, y: 355 }, + }, + ]) + + const edges: Ref = ref([ + { + id: "(user)-(post)-(post_id)", + source: "user", + target: "post", + type: "smoothstep", + }, + ]) + + const convertToPayload = () => { + const models = nodes.value.map((node) => { + const modelName = node.id + + const fields = node.data.fields.map((field) => { + return { + name: field.name, + type: field.type, + type_enum: field.typeEnum ?? null, + primary_key: field.isPrimaryKey ?? false, + nullable: field.isNullable ?? false, + unique: field.isUnique ?? false, + index: field.isIndex ?? false, + default_value: field.defaultValue ?? null, + extra_kwargs: null, + metadata: { + is_created_at_timestamp: field.name === "created_at", + is_updated_at_timestamp: field.name === "updated_at", + is_foreign_key: false, + }, + } + }) + + const relationships = node.data.relations.map((relation) => { + return { + field_name: relation.fieldName, + target_model: relation.targetModel, + back_populates: null, + on_delete: relation.onDelete ?? "CASCADE", + nullable: relation.isNullable ?? false, + unique: relation.isUnique ?? false, + index: relation.isIndex ?? false, + } + }) + + return { + name: modelName, + fields, + relationships, + metadata: { + create_endpoints: true, + create_tests: true, + create_daos: true, + create_dtos: true, + is_auth_model: false, + }, + } + }) + + const custom_enums = enums.value.map((enm) => { + return { + name: enm.name, + values: enm.values.map((val) => ({ + name: val.name, + value: val.value, + })), + } + }) + + return { + project_name: projectSpec.value.project_name, + use_postgres: true, + use_alembic: true, + models, + custom_enums, + } + } + + const callGenerateEndpoint = async () => { + const payload = convertToPayload() + + try { + const response = await fetch("http://localhost:8000/generate", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }) + + if (!response.ok) { + const errorText = await response.text() + throw new Error(`Error ${response.status}: ${errorText}`) + } + + const result = await response.json() + console.log("Generation successful:", result) + return result + } catch (error) { + console.error("Generation failed:", error) + throw error + } + } + + const findNodeById = (id: string): NodeT | undefined => { + return nodes.value.find((node) => node.id === id) + } + + const createNode = (id: string): void => { + if (findNodeById(id)) return + nodes.value.push({ + id, + data: { fields: [], relations: [] }, + type: "custom", + position: { x: 100, y: 100 }, + }) + } + + const deleteNode = (id: string): void => { + const node = findNodeById(id) + if (!node) return + nodes.value = nodes.value.filter((node) => node.id !== id) + edges.value = edges.value.filter((edge) => edge.source !== id && edge.target !== id) + nodes.value.forEach((node) => { + if (node.data.relations) { + node.data.relations = node.data.relations?.filter((relation) => relation.targetModel !== id) + } + }) + } + + const renameNode = (source: string, newName: string) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + const existingNode = findNodeById(newName) + if (existingNode) throw new Error(`Duplicate name: ${newName}`) + node.id = newName + edges.value.forEach((edge) => { + if (edge.source === source) edge.source = newName + if (edge.target === source) edge.target = newName + edge.id = edge.id.replace(`(${source})`, `(${newName})`) + }) + + nodes.value.forEach((n) => { + n.data.relations.forEach((rel) => { + if (rel.targetModel === source) { + rel.targetModel = newName + } + }) + }) + } + + const nameExistsInModel = (node: NodeT, name: string): boolean => { + const existingFieldname = node.data.fields.find((field) => field.name === name) + const existingRelationFieldName = node.data.relations.find( + (relation) => relation.fieldName === name, + ) + return !!existingFieldname || !!existingRelationFieldName + } + + const addField = (source: string, fieldData: RelationalField) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + if (nameExistsInModel(node, fieldData.name)) + throw new Error(`Field name already exists for model: ${source}`) + node.data.fields.push(fieldData) + } + + const updateField = (source: string, originalFieldName: string, fieldData: RelationalField) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + const fieldIndex = node.data.fields.findIndex((f) => f.name === originalFieldName) + if (fieldIndex === -1) throw new Error(`Field does not exist: ${originalFieldName}`) + node.data.fields[fieldIndex] = fieldData + console.log(fieldData) + } + + const deleteField = (source: string, fieldName: string) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + node.data.fields = node.data.fields.filter((field) => field.name !== fieldName) + } + + const addRelation = ( + source: string, + target: string, + relationData: RelationalRelationField, + ): void => { + const node = findNodeById(source) + if (!node) return + createEdge(source, target, relationData.fieldName) + node.data.relations.push(relationData) + } + + const deleteRelation = (source: string, target: string, fieldName: string) => { + const node = findNodeById(source) + if (!node) return + node.data.relations = node.data.relations.filter((relation) => relation.fieldName !== fieldName) + deleteEdge(source, target, fieldName) + } + + const updateRelation = ( + source: string, + originalTarget: string, + originalFieldName: string, + relationData: RelationalRelationField, + ): void => { + const node = findNodeById(source) + if (!node || !node.data.relations) return + const index = node.data.relations.findIndex((rel) => rel.fieldName === originalFieldName) + node.data.relations[index] = relationData + + const edgeId = formatEdgeId(source, originalTarget, originalFieldName) + const edge = getEdgeById(edgeId) + if (!edge) return + + const newEdgeId = formatEdgeId(source, relationData.targetModel, relationData.fieldName) + edge.id = newEdgeId + edge.source = source + edge.target = relationData.targetModel + } + + const getEdgeById = (id: string): EdgeT | undefined => { + return edges.value.find((edge) => edge.id === id) + } + + const formatEdgeId = (source: string, target: string, fieldName: string): string => { + return `(${source})-(${target})-(${fieldName})` + } + + const createEdge = (source: string, target: string, fieldName: string): void => { + if (source === target) return + edges.value.push({ + id: formatEdgeId(source, target, fieldName), + source, + target, + type: "smoothstep", + }) + } + + const deleteEdge = (source: string, target: string, fieldName: string) => { + edges.value = edges.value.filter((edge) => edge.id !== formatEdgeId(source, target, fieldName)) + } + + const findEnumByName = (name: string): EnumT => { + const en = enums.value.find((e) => e.name === name) + if (!en) throw Error(`Enum not found: ${name}`) + return en + } + + const findEnumValue = (enumName: string, enumValueName: string): EnumValue => { + const en = findEnumByName(enumName) + const ev = en.values.find((v) => v.name === enumValueName) + if (!ev) throw Error(`EnumValue not found: ${enumValueName}`) + return ev + } + + const addEnum = (name: string): EnumT => { + const newEnum = { name: name, values: [] } + enums.value.push(newEnum) + return newEnum + } + const updateEnumName = (oldName: string, newName: string) => { + const en = findEnumByName(oldName) + en.name = newName + nodes.value.forEach((n) => { + n.data.fields.forEach((f) => { + if (f.type === "Enum" && f.typeEnum === oldName) { + f.typeEnum = newName + } + }) + }) + } + const deleteEnum = (name: string) => { + enums.value = enums.value.filter((e) => e.name !== name) + nodes.value.forEach((n) => { + n.data.fields = n.data.fields.filter((f) => f.typeEnum !== name) + }) + } + + const addEnumValue = (enumName: string, enumValue: EnumValue) => { + const en = findEnumByName(enumName) + en.values.push(enumValue) + } + const updateEnumValue = (enumName: string, enumValueName: string, newEnumValue: EnumValue) => { + const ev = findEnumValue(enumName, enumValueName) + ev.name = newEnumValue.name + ev.value = newEnumValue.value + + console.log(enumName) + console.log(newEnumValue) + + nodes.value.forEach((n) => { + n.data.fields.forEach((f) => { + if (f.type === "Enum" && f.typeEnum === enumName) { + f.defaultValue = newEnumValue.name + } + }) + }) + } + const deleteEnumValue = (enumName: string, enumValueName: string) => { + const en = findEnumByName(enumName) + en.values = en.values.filter((e) => e.name !== enumValueName) + } + + const setProjectName = (projectName: string): void => { + projectSpec.value.project_name = projectName + } + const getProjectName = (): string => { + return projectSpec.value.project_name + } + + const setDatabase = (database: string): void => { + projectSpec.value.database = database + } + const getDatabase = (): string => { + return projectSpec.value.database + } + + return { + nodes, + edges, + enums, + createNode, + createEdge, + deleteNode, + renameNode, + addField, + deleteField, + updateField, + addRelation, + deleteRelation, + updateRelation, + projectSpec, + isProjectNameConfirmed, + setProjectName, + getProjectName, + setDatabase, + getDatabase, + findNodeById, + findEnumByName, + addEnum, + updateEnumName, + deleteEnum, + addEnumValue, + updateEnumValue, + deleteEnumValue, + convertNodesToModel: convertToPayload, + callGenerateEndpoint, + } +}) diff --git a/frontend/src/types/types.ts b/frontend/src/types/types.ts new file mode 100644 index 0000000..62b02bd --- /dev/null +++ b/frontend/src/types/types.ts @@ -0,0 +1,69 @@ +export interface Position2D { + x: number + y: number +} + +export type FieldType = "String" | "UUID" | "DateTime" | "Number" | "Boolean" | "String" | "Enum" + +export interface RelationalFieldMetadata { + isCreatedAtTimestamp?: boolean + isUpdatedAtTimestamp?: boolean +} + +export interface RelationalField { + name: string + type: FieldType + typeEnum?: string + isPrimaryKey?: boolean + isNullable?: boolean + isUnique?: boolean + isIndex?: boolean + defaultValue?: string + metadata?: RelationalFieldMetadata + extraKwargs?: object +} + +export type OnDeleteType = "CASCADE" | "SET NULL" + +export interface RelationalRelationField { + fieldName: string + targetModel: string + onDelete: OnDeleteType + backPopulates?: string + isNullable?: boolean + isUnique?: boolean + isIndex?: boolean +} + +export interface RelationalNodeData { + fields: Array + relations: Array +} + +export interface NodeT { + id: string + data: RelationalNodeData + type: string + position: Position2D +} + +export interface EdgeT { + id: string + source: string + target: string + type: string +} + +export interface EnumValue { + name: string + value: string +} + +export interface EnumT { + name: string + values: Array +} + +export type NodesArray = Array +export type EdgesArray = Array +export type EnumsArray = Array diff --git a/frontend/src/utils/toast.ts b/frontend/src/utils/toast.ts new file mode 100644 index 0000000..9e90554 --- /dev/null +++ b/frontend/src/utils/toast.ts @@ -0,0 +1,14 @@ +import { useToast } from "vue-toastification" +const toast = useToast() + +export const showSuccessToast = (msg: string) => { + toast.success(msg, { toastClassName: "container-class" }) +} + +export const showDangerToast = (msg: string) => { + toast.error(msg, { toastClassName: "container-class" }) +} + +export const showWarningToast = (msg: string) => { + toast.warning(msg, { toastClassName: "container-class" }) +} diff --git a/frontend/src/utils/validation.ts b/frontend/src/utils/validation.ts new file mode 100644 index 0000000..fb78424 --- /dev/null +++ b/frontend/src/utils/validation.ts @@ -0,0 +1,34 @@ +const patterns = { + boundedStr: /^.{1,100}$/, + snakeCase: /^[a-z][a-z0-9_]*$/, + pascalCase: /^[A-Z][a-z]*$/, + enumStr: /^[a-zA-Z][a-zA-Z0-9_]*$/, + variableStr: /^[a-zA-Z_][a-zA-Z0-9_-]*$/, +} + +export const isValidProjectName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidModelName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidEnumName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.pascalCase.test(value) +} +export const isValidEnumValueName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidFieldName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.snakeCase.test(value) +} + +export const warningMessages = { + projectName: "Use 1-100 characters. Start with a letter or underscore. Example: my_project1", + modelName: "Use 1-100 characters. Start with a letter or underscore. Example: userModel_1", + enumName: "Use PascalCase (start with uppercase). Example: UserStatus", + enumValueName: "Use 1-100 characters. Start with a letter or underscore. Example: active_status", + fieldName: "Use lowercase snake_case. Example: user_name", +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..913b8f2 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..a83dfc9 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*", + "eslint.config.*" + ], + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..d6eb786 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,22 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + ], + build: { + outDir: '../fastapi_forge/static', + emptyOutDir: true, + }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +}) diff --git a/pyproject.toml b/pyproject.toml index fc4d66f..28d6668 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,8 @@ authors = [{ name = "mslaursen", email = "mslaursendk@gmail.com" }] [project.urls] Repository = "https://github.com/mslaursen/fastapi-forge.git" -[tool.setuptools_scm] +[tool.setuptools] +py-modules = ["fastapi_forge"] [project.scripts] fastapi-forge = "fastapi_forge.__main__:main" diff --git a/tests/test_type_registry.py b/tests/test_type_registry.py index cb439c8..90a14a3 100644 --- a/tests/test_type_registry.py +++ b/tests/test_type_registry.py @@ -36,29 +36,6 @@ def test_registry_get_not_found(type_info_registry: TypeInfoRegistry) -> None: assert "Key 'Boolean' not found." in str(exc_info.value) -def test_key_already_registered(type_info_registry: TypeInfoRegistry) -> None: - type_info_registry.register( - FieldDataTypeEnum.STRING, - TypeInfo( - sqlalchemy_type="String", - sqlalchemy_prefix=True, - python_type="str", - ), - ) - with pytest.raises(KeyError) as exc_info: - type_info_registry.register( - FieldDataTypeEnum.STRING, - TypeInfo( - sqlalchemy_type="String", - sqlalchemy_prefix=True, - python_type="str", - ), - ) - assert "TypeInfoRegistry: Key 'String' is already registered." in str( - exc_info.value - ) - - ############################## # EnumTypeInfoRegistry tests # ############################## @@ -86,13 +63,3 @@ def test_custom_enum_register_w_values() -> None: type_info = enum_registry.get(enum.name) assert type_info.sqlalchemy_type == 'Enum(enums.HTTPMethod, name="http_method")' assert type_info.faker_field_value == "enums.HTTPMethod.GET" - - -def test_duplicate_custom_enum() -> None: - CustomEnum(name="TEST") - with pytest.raises(KeyError) as exc_info: - CustomEnum(name="TEST") - - assert "EnumTypeInfoRegistry: Key 'TEST' is already registered." in str( - exc_info.value - ) diff --git a/uv.lock b/uv.lock index 70e9045..95dab77 100644 --- a/uv.lock +++ b/uv.lock @@ -303,7 +303,7 @@ wheels = [ [[package]] name = "fastapi-forge" -version = "0.1.dev213+g48eaca0.d20250524" +version = "0.0.0" source = { editable = "." } dependencies = [ { name = "click" },
{const{el:m,type:I,transition:B,children:R,shapeFlag:A}=w;if(A&6){Y(w.component.subTree,S,f,v);return}if(A&128){w.suspense.move(S,f,v);return}if(A&64){I.move(w,S,f,we);return}if(I===_e){o(m,S,f);for(let K=0;KB.enter(m),y);else{const{leave:K,delayLeave:ne,afterLeave:se}=B,ge=()=>{w.ctx.isUnmounted?i(m):o(m,S,f)},Ce=()=>{K(m,()=>{ge(),se&&se()})};ne?ne(m,ge,Ce):Ce()}else o(m,S,f)},J=(w,S,f,v=!1,y=!1)=>{const{type:m,props:I,ref:B,children:R,dynamicChildren:A,shapeFlag:q,patchFlag:K,dirs:ne,cacheIndex:se}=w;if(K===-2&&(y=!1),B!=null&&(dn(),ko(B,null,f,w,!0),fn()),se!=null&&(S.renderCache[se]=void 0),q&256){S.ctx.deactivate(w);return}const ge=q&1&&ne,Ce=!no(w);let Te;if(Ce&&(Te=I&&I.onVnodeBeforeUnmount)&&Pt(Te,S,w),q&6)ie(w.component,f,v);else{if(q&128){w.suspense.unmount(f,v);return}ge&&$n(w,null,S,"beforeUnmount"),q&64?w.type.remove(w,S,f,we,v):A&&!A.hasOnce&&(m!==_e||K>0&&K&64)?le(A,S,f,!1,!0):(m===_e&&K&384||!y&&q&16)&&le(R,S,f),v&&ue(w)}(Ce&&(Te=I&&I.onVnodeUnmounted)||ge)&&ot(()=>{Te&&Pt(Te,S,w),ge&&$n(w,null,S,"unmounted")},f)},ue=w=>{const{type:S,el:f,anchor:v,transition:y}=w;if(S===_e){Q(f,v);return}if(S===Si){_(w);return}const m=()=>{i(f),y&&!y.persisted&&y.afterLeave&&y.afterLeave()};if(w.shapeFlag&1&&y&&!y.persisted){const{leave:I,delayLeave:B}=y,R=()=>I(f,m);B?B(w.el,m,R):R()}else m()},Q=(w,S)=>{let f;for(;w!==S;)f=p(w),i(w),w=f;i(S)},ie=(w,S,f)=>{const{bum:v,scope:y,job:m,subTree:I,um:B,m:R,a:A,parent:q,slots:{__:K}}=w;Tl(R),Tl(A),v&&xi(v),q&&ce(K)&&K.forEach(ne=>{q.renderCache[ne]=void 0}),y.stop(),m&&(m.flags|=8,J(I,w,S,f)),B&&ot(B,S),ot(()=>{w.isUnmounted=!0},S),S&&S.pendingBranch&&!S.isUnmounted&&w.asyncDep&&!w.asyncResolved&&w.suspenseId===S.pendingId&&(S.deps--,S.deps===0&&S.resolve())},le=(w,S,f,v=!1,y=!1,m=0)=>{for(let I=m;I{if(w.shapeFlag&6)return me(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const S=p(w.anchor||w.el),f=S&&S[Nu];return f?p(f):S};let be=!1;const fe=(w,S,f)=>{w==null?S._vnode&&J(S._vnode,null,null,!0):E(S._vnode||null,w,S,null,null,null,f),S._vnode=w,be||(be=!0,ml(),Eu(),be=!1)},we={p:E,um:J,m:Y,r:ue,mt:T,mc:H,pc:$,pbc:Z,n:me,o:e};return{render:fe,hydrate:void 0,createApp:dh(fe)}}function Os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function In({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function wh(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Xr(e,t,n=!1){const o=e.children,i=t.children;if(ce(o)&&ce(i))for(let s=0;s>1,e[n[l]]0&&(t[o]=n[s-1]),n[s]=o)}}for(s=n.length,r=n[s-1];s-- >0;)n[s]=r,r=t[r];return n}function qu(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:qu(t)}function Tl(e){if(e)for(let t=0;tmt(Eh);function xe(e,t,n){return Ju(e,t,n)}function Ju(e,t,n=Pe){const{immediate:o,deep:i,flush:s,once:r}=n,l=je({},n),a=t&&o||!t&&s!=="post";let u;if(jo){if(s==="sync"){const h=Sh();u=h.__watcherHandles||(h.__watcherHandles=[])}else if(!a){const h=()=>{};return h.stop=Lt,h.resume=Lt,h.pause=Lt,h}}const c=et;l.call=(h,b,E)=>Tt(h,c,b,E);let d=!1;s==="post"?l.scheduler=h=>{ot(h,c&&c.suspense)}:s!=="sync"&&(d=!0,l.scheduler=(h,b)=>{b?h():Gr(h)}),l.augmentJob=h=>{t&&(h.flags|=4),d&&(h.flags|=2,c&&(h.id=c.uid,h.i=c))};const p=Rf(e,t,l);return jo&&(u?u.push(p):a&&p()),p}function Ch(e,t,n){const o=this.proxy,i=Le(e)?e.includes(".")?Qu(o,e):()=>o[e]:e.bind(o,o);let s;ve(t)?s=t:(s=t.handler,n=t);const r=ii(this),l=Ju(i,s.bind(o),n);return r(),l}function Qu(e,t){const n=t.split(".");return()=>{let o=e;for(let i=0;it==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${yt(t)}Modifiers`]||e[`${Tn(t)}Modifiers`];function Th(e,t,...n){if(e.isUnmounted)return;const o=e.vnode.props||Pe;let i=n;const s=t.startsWith("update:"),r=s&&Nh(o,t.slice(7));r&&(r.trim&&(i=n.map(c=>Le(c)?c.trim():c)),r.number&&(i=n.map(Ai)));let l,a=o[l=wi(t)]||o[l=wi(yt(t))];!a&&s&&(a=o[l=wi(Tn(t))]),a&&Tt(a,e,6,i);const u=o[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Tt(u,e,6,i)}}function ec(e,t,n=!1){const o=t.emitsCache,i=o.get(e);if(i!==void 0)return i;const s=e.emits;let r={},l=!1;if(!ve(e)){const a=u=>{const c=ec(u,t,!0);c&&(l=!0,je(r,c))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(ke(e)&&o.set(e,null),null):(ce(s)?s.forEach(a=>r[a]=null):je(r,s),ke(e)&&o.set(e,r),r)}function cs(e,t){return!e||!Qi(t)?!1:(t=t.slice(2).replace(/Once$/,""),$e(e,t[0].toLowerCase()+t.slice(1))||$e(e,Tn(t))||$e(e,t))}function Ml(e){const{type:t,vnode:n,proxy:o,withProxy:i,propsOptions:[s],slots:r,attrs:l,emit:a,render:u,renderCache:c,props:d,data:p,setupState:h,ctx:b,inheritAttrs:E}=e,N=Bi(e);let M,P;try{if(n.shapeFlag&4){const _=i||o,O=_;M=Rt(u.call(O,_,c,d,h,p,b)),P=l}else{const _=t;M=Rt(_.length>1?_(d,{attrs:l,slots:r,emit:a}):_(d,null)),P=t.props?l:Mh(l)}}catch(_){Ao.length=0,ls(_,e,1),M=Me(Gt)}let g=M;if(P&&E!==!1){const _=Object.keys(P),{shapeFlag:O}=g;_.length&&O&7&&(s&&_.some(Ar)&&(P=$h(P,s)),g=Un(g,P,!1,!0))}return n.dirs&&(g=Un(g,null,!1,!0),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&Uo(g,n.transition),M=g,Bi(N),M}const Mh=e=>{let t;for(const n in e)(n==="class"||n==="style"||Qi(n))&&((t||(t={}))[n]=e[n]);return t},$h=(e,t)=>{const n={};for(const o in e)(!Ar(o)||!(o.slice(9)in t))&&(n[o]=e[o]);return n};function Ih(e,t,n){const{props:o,children:i,component:s}=e,{props:r,children:l,patchFlag:a}=t,u=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return o?$l(o,r,u):!!r;if(a&8){const c=t.dynamicProps;for(let d=0;de.__isSuspense;function Ph(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):Lf(e)}const _e=Symbol.for("v-fgt"),ds=Symbol.for("v-txt"),Gt=Symbol.for("v-cmt"),Si=Symbol.for("v-stc"),Ao=[];let st=null;function z(e=!1){Ao.push(st=e?null:[])}function Ah(){Ao.pop(),st=Ao[Ao.length-1]||null}let ro=1;function Il(e,t=!1){ro+=e,e<0&&st&&t&&(st.hasOnce=!0)}function nc(e){return e.dynamicChildren=ro>0?st||Qn:null,Ah(),ro>0&&st&&st.push(e),e}function W(e,t,n,o,i,s){return nc(x(e,t,n,o,i,s,!0))}function Re(e,t,n,o,i){return nc(Me(e,t,n,o,i,!0))}function Go(e){return e?e.__v_isVNode===!0:!1}function Jn(e,t){return e.type===t.type&&e.key===t.key}const oc=({key:e})=>e??null,Ci=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||Oe(e)||ve(e)?{i:Ze,r:e,k:t,f:!!n}:e:null);function x(e,t=null,n=null,o=0,i=null,s=e===_e?0:1,r=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&oc(t),ref:t&&Ci(t),scopeId:Cu,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:o,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Ze};return l?(Zr(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=Le(n)?8:16),ro>0&&!r&&st&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&st.push(a),a}const Me=Dh;function Dh(e,t=null,n=null,o=0,i=null,s=!1){if((!e||e===Ru)&&(e=Gt),Go(e)){const l=Un(e,t,!0);return n&&Zr(l,n),ro>0&&!s&&st&&(l.shapeFlag&6?st[st.indexOf(e)]=l:st.push(l)),l.patchFlag=-2,l}if(Uh(e)&&(e=e.__vccOpts),t){t=Oh(t);let{class:l,style:a}=t;l&&!Le(l)&&(t.class=ze(l)),ke(a)&&(Ur(a)&&!ce(a)&&(a=je({},a)),t.style=at(a))}const r=Le(e)?1:tc(e)?128:Ff(e)?64:ke(e)?4:ve(e)?2:0;return x(e,t,n,o,i,r,s,!0)}function Oh(e){return e?Ur(e)||ju(e)?je({},e):e:null}function Un(e,t,n=!1,o=!1){const{props:i,ref:s,patchFlag:r,children:l,transition:a}=e,u=t?Mn(i||{},t):i,c={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&oc(u),ref:t&&t.ref?n&&s?ce(s)?s.concat(Ci(t)):[s,Ci(t)]:Ci(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Un(e.ssContent),ssFallback:e.ssFallback&&Un(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&o&&Uo(c,a.clone(c)),c}function Be(e=" ",t=0){return Me(ds,null,e,t)}function Wr(e,t){const n=Me(Si,null,e);return n.staticCount=t,n}function Ne(e="",t=!1){return t?(z(),Re(Gt,null,e)):Me(Gt,null,e)}function Rt(e){return e==null||typeof e=="boolean"?Me(Gt):ce(e)?Me(_e,null,e.slice()):Go(e)?wn(e):Me(ds,null,String(e))}function wn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Un(e)}function Zr(e,t){let n=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(o&65){const i=t.default;i&&(i._c&&(i._d=!1),Zr(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!ju(t)?t._ctx=Ze:i===3&&Ze&&(Ze.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ve(t)?(t={default:t,_ctx:Ze},n=32):(t=String(t),o&64?(n=16,t=[Be(t)]):n=8);e.children=t,e.shapeFlag|=n}function Mn(...e){const t={};for(let n=0;net||Ze;let Fi,ur;{const e=ns(),t=(n,o)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(o),s=>{i.length>1?i.forEach(r=>r(s)):i[0](s)}};Fi=t("__VUE_INSTANCE_SETTERS__",n=>et=n),ur=t("__VUE_SSR_SETTERS__",n=>jo=n)}const ii=e=>{const t=et;return Fi(e),e.scope.on(),()=>{e.scope.off(),Fi(t)}},kl=()=>{et&&et.scope.off(),Fi(null)};function ic(e){return e.vnode.shapeFlag&4}let jo=!1;function Lh(e,t=!1,n=!1){t&&ur(t);const{props:o,children:i}=e.vnode,s=ic(e);hh(e,o,s,t),mh(e,i,n||t);const r=s?Fh(e,t):void 0;return t&&ur(!1),r}function Fh(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,th);const{setup:o}=n;if(o){dn();const i=e.setupContext=o.length>1?rc(e):null,s=ii(e),r=oi(o,e,0,[e.props,i]),l=Za(r);if(fn(),s(),(l||e.sp)&&!no(e)&&Iu(e),l){if(r.then(kl,kl),t)return r.then(a=>{Pl(e,a)}).catch(a=>{ls(a,e,0)});e.asyncDep=r}else Pl(e,r)}else sc(e)}function Pl(e,t,n){ve(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ke(t)&&(e.setupState=yu(t)),sc(e)}function sc(e,t,n){const o=e.type;e.render||(e.render=o.render||Lt);{const i=ii(e);dn();try{sh(e)}finally{fn(),i()}}}const zh={get(e,t){return Qe(e,"get",""),e[t]}};function rc(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,zh),slots:e.slots,emit:e.emit,expose:t}}function fs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(yu(an(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Po)return Po[n](e)},has(t,n){return n in t||n in Po}})):e.proxy}function Hh(e,t=!0){return ve(e)?e.displayName||e.name:e.name||t&&e.__name}function Uh(e){return ve(e)&&"__vccOpts"in e}const pe=(e,t)=>Df(e,t,jo);function Ie(e,t,n){const o=arguments.length;return o===2?ke(t)&&!ce(t)?Go(t)?Me(e,null,[t]):Me(e,t):Me(e,null,t):(o>3?n=Array.prototype.slice.call(arguments,2):o===3&&Go(n)&&(n=[n]),Me(e,t,n))}function Gh(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let o=0;o0&&st&&st.push(e),!0}const jh="3.5.18";/** +* @vue/runtime-dom v3.5.18 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let cr;const Al=typeof window<"u"&&window.trustedTypes;if(Al)try{cr=Al.createPolicy("vue",{createHTML:e=>e})}catch{}const lc=cr?e=>cr.createHTML(e):e=>e,Yh="http://www.w3.org/2000/svg",Kh="http://www.w3.org/1998/Math/MathML",Qt=typeof document<"u"?document:null,Dl=Qt&&Qt.createElement("template"),Xh={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,o)=>{const i=t==="svg"?Qt.createElementNS(Yh,e):t==="mathml"?Qt.createElementNS(Kh,e):n?Qt.createElement(e,{is:n}):Qt.createElement(e);return e==="select"&&o&&o.multiple!=null&&i.setAttribute("multiple",o.multiple),i},createText:e=>Qt.createTextNode(e),createComment:e=>Qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,o,i,s){const r=n?n.previousSibling:t.lastChild;if(i&&(i===s||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===s||!(i=i.nextSibling)););else{Dl.innerHTML=lc(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const l=Dl.content;if(o==="svg"||o==="mathml"){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},gn="transition",_o="animation",lo=Symbol("_vtc"),ac={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Wh=je({},Gf,ac),kn=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ol=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function Zh(e){const t={};for(const C in e)C in ac||(t[C]=e[C]);if(e.css===!1)return t;const{name:n="v",type:o,duration:i,enterFromClass:s=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:u=r,appearToClass:c=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,b=qh(i),E=b&&b[0],N=b&&b[1],{onBeforeEnter:M,onEnter:P,onEnterCancelled:g,onLeave:_,onLeaveCancelled:O,onBeforeAppear:U=M,onAppear:X=P,onAppearCancelled:H=g}=t,F=(C,ee,T,G)=>{C._enterCancelled=G,mn(C,ee?c:l),mn(C,ee?u:r),T&&T()},Z=(C,ee)=>{C._isLeaving=!1,mn(C,d),mn(C,h),mn(C,p),ee&&ee()},j=C=>(ee,T)=>{const G=C?X:P,k=()=>F(ee,C,T);kn(G,[ee,k]),Rl(()=>{mn(ee,C?a:s),At(ee,C?c:l),Ol(G)||Vl(ee,o,E,k)})};return je(t,{onBeforeEnter(C){kn(M,[C]),At(C,s),At(C,r)},onBeforeAppear(C){kn(U,[C]),At(C,a),At(C,u)},onEnter:j(!1),onAppear:j(!0),onLeave(C,ee){C._isLeaving=!0;const T=()=>Z(C,ee);At(C,d),C._enterCancelled?(At(C,p),dr()):(dr(),At(C,p)),Rl(()=>{C._isLeaving&&(mn(C,d),At(C,h),Ol(_)||Vl(C,o,N,T))}),kn(_,[C,T])},onEnterCancelled(C){F(C,!1,void 0,!0),kn(g,[C])},onAppearCancelled(C){F(C,!0,void 0,!0),kn(H,[C])},onLeaveCancelled(C){Z(C),kn(O,[C])}})}function qh(e){if(e==null)return null;if(ke(e))return[Rs(e.enter),Rs(e.leave)];{const t=Rs(e);return[t,t]}}function Rs(e){return Jd(e)}function At(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[lo]||(e[lo]=new Set)).add(t)}function mn(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const n=e[lo];n&&(n.delete(t),n.size||(e[lo]=void 0))}function Rl(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Jh=0;function Vl(e,t,n,o){const i=e._endId=++Jh,s=()=>{i===e._endId&&o()};if(n!=null)return setTimeout(s,n);const{type:r,timeout:l,propCount:a}=uc(e,t);if(!r)return o();const u=r+"end";let c=0;const d=()=>{e.removeEventListener(u,p),s()},p=h=>{h.target===e&&++c>=a&&d()};setTimeout(()=>{c(n[b]||"").split(", "),i=o(`${gn}Delay`),s=o(`${gn}Duration`),r=Bl(i,s),l=o(`${_o}Delay`),a=o(`${_o}Duration`),u=Bl(l,a);let c=null,d=0,p=0;t===gn?r>0&&(c=gn,d=r,p=s.length):t===_o?u>0&&(c=_o,d=u,p=a.length):(d=Math.max(r,u),c=d>0?r>u?gn:_o:null,p=c?c===gn?s.length:a.length:0);const h=c===gn&&/\b(transform|all)(,|$)/.test(o(`${gn}Property`).toString());return{type:c,timeout:d,propCount:p,hasTransform:h}}function Bl(e,t){for(;e.lengthLl(n)+Ll(e[o])))}function Ll(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function dr(){return document.body.offsetHeight}function Qh(e,t,n){const o=e[lo];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Fl=Symbol("_vod"),ep=Symbol("_vsh"),tp=Symbol(""),np=/(^|;)\s*display\s*:/;function op(e,t,n){const o=e.style,i=Le(n);let s=!1;if(n&&!i){if(t)if(Le(t))for(const r of t.split(";")){const l=r.slice(0,r.indexOf(":")).trim();n[l]==null&&Ni(o,l,"")}else for(const r in t)n[r]==null&&Ni(o,r,"");for(const r in n)r==="display"&&(s=!0),Ni(o,r,n[r])}else if(i){if(t!==n){const r=o[tp];r&&(n+=";"+r),o.cssText=n,s=np.test(n)}}else t&&e.removeAttribute("style");Fl in e&&(e[Fl]=s?o.display:"",e[ep]&&(o.display="none"))}const zl=/\s*!important$/;function Ni(e,t,n){if(ce(n))n.forEach(o=>Ni(e,t,o));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const o=ip(e,t);zl.test(n)?e.setProperty(Tn(o),n.replace(zl,""),"important"):e[o]=n}}const Hl=["Webkit","Moz","ms"],Vs={};function ip(e,t){const n=Vs[t];if(n)return n;let o=yt(t);if(o!=="filter"&&o in e)return Vs[t]=o;o=ts(o);for(let i=0;iBs||(ap.then(()=>Bs=0),Bs=Date.now());function cp(e,t){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;Tt(dp(o,n.value),t,5,[o])};return n.value=e,n.attached=up(),n}function dp(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(o=>i=>!i._stopped&&o&&o(i))}else return t}const Xl=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,fp=(e,t,n,o,i,s)=>{const r=i==="svg";t==="class"?Qh(e,o,r):t==="style"?op(e,n,o):Qi(t)?Ar(t)||rp(e,t,n,o,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):hp(e,t,o,r))?(jl(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Gl(e,t,o,r,s,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Le(o))?jl(e,yt(t),o,s,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Gl(e,t,o,r))};function hp(e,t,n,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&Xl(t)&&ve(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return Xl(t)&&Le(n)?!1:t in e}const cc=new WeakMap,dc=new WeakMap,zi=Symbol("_moveCb"),Wl=Symbol("_enterCb"),pp=e=>(delete e.props.mode,e),gp=pp({name:"TransitionGroup",props:je({},Wh,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Xt(),o=Uf();let i,s;return Du(()=>{if(!i.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!bp(i[0].el,n.vnode.el,r)){i=[];return}i.forEach(mp),i.forEach(yp);const l=i.filter(_p);dr(),l.forEach(a=>{const u=a.el,c=u.style;At(u,r),c.transform=c.webkitTransform=c.transitionDuration="";const d=u[zi]=p=>{p&&p.target!==u||(!p||/transform$/.test(p.propertyName))&&(u.removeEventListener("transitionend",d),u[zi]=null,mn(u,r))};u.addEventListener("transitionend",d)}),i=[]}),()=>{const r=Se(e),l=Zh(r);let a=r.tag||_e;if(i=[],s)for(let u=0;u{l.split(/\s+/).forEach(a=>a&&o.classList.remove(a))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const s=t.nodeType===1?t:t.parentNode;s.appendChild(o);const{hasTransform:r}=uc(o);return s.removeChild(o),r}const ao=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>xi(t,n):t};function wp(e){e.target.composing=!0}function Zl(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const un=Symbol("_assign"),tt={created(e,{modifiers:{lazy:t,trim:n,number:o}},i){e[un]=ao(i);const s=o||i.props&&i.props.type==="number";En(e,t?"change":"input",r=>{if(r.target.composing)return;let l=e.value;n&&(l=l.trim()),s&&(l=Ai(l)),e[un](l)}),n&&En(e,"change",()=>{e.value=e.value.trim()}),t||(En(e,"compositionstart",wp),En(e,"compositionend",Zl),En(e,"change",Zl))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:o,trim:i,number:s}},r){if(e[un]=ao(r),e.composing)return;const l=(s||e.type==="number")&&!/^0\d/.test(e.value)?Ai(e.value):e.value,a=t??"";l!==a&&(document.activeElement===e&&e.type!=="range"&&(o&&t===n||i&&e.value.trim()===a)||(e.value=a))}},Ke={deep:!0,created(e,t,n){e[un]=ao(n),En(e,"change",()=>{const o=e._modelValue,i=Yo(e),s=e.checked,r=e[un];if(ce(o)){const l=Rr(o,i),a=l!==-1;if(s&&!a)r(o.concat(i));else if(!s&&a){const u=[...o];u.splice(l,1),r(u)}}else if(po(o)){const l=new Set(o);s?l.add(i):l.delete(i),r(l)}else r(fc(e,s))})},mounted:ql,beforeUpdate(e,t,n){e[un]=ao(n),ql(e,t,n)}};function ql(e,{value:t,oldValue:n},o){e._modelValue=t;let i;if(ce(t))i=Rr(t,o.props.value)>-1;else if(po(t))i=t.has(o.props.value);else{if(t===n)return;i=ni(t,fc(e,!0))}e.checked!==i&&(e.checked=i)}const Ft={deep:!0,created(e,{value:t,modifiers:{number:n}},o){const i=po(t);En(e,"change",()=>{const s=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?Ai(Yo(r)):Yo(r));e[un](e.multiple?i?new Set(s):s:s[0]),e._assigning=!0,ht(()=>{e._assigning=!1})}),e[un]=ao(o)},mounted(e,{value:t}){Jl(e,t)},beforeUpdate(e,t,n){e[un]=ao(n)},updated(e,{value:t}){e._assigning||Jl(e,t)}};function Jl(e,t){const n=e.multiple,o=ce(t);if(!(n&&!o&&!po(t))){for(let i=0,s=e.options.length;iString(u)===String(l)):r.selected=Rr(t,l)>-1}else r.selected=t.has(l);else if(ni(Yo(r),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Yo(e){return"_value"in e?e._value:e.value}function fc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const xp=["ctrl","shift","alt","meta"],Ep={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>xp.some(n=>e[`${n}Key`]&&!t.includes(n))},Do=(e,t)=>{const n=e._withMods||(e._withMods={}),o=t.join(".");return n[o]||(n[o]=(i,...s)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),o=t.join(".");return n[o]||(n[o]=i=>{if(!("key"in i))return;const s=Tn(i.key);if(t.some(r=>r===s||Sp[r]===s))return e(i)})},Cp=je({patchProp:fp},Xh);let Ql;function Np(){return Ql||(Ql=_h(Cp))}const hc=(...e)=>{const t=Np().createApp(...e),{mount:n}=t;return t.mount=o=>{const i=Mp(o);if(!i)return;const s=t._component;!ve(s)&&!s.render&&!s.template&&(s.template=i.innerHTML),i.nodeType===1&&(i.textContent="");const r=n(i,!1,Tp(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),r},t};function Tp(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Mp(e){return Le(e)?document.querySelector(e):e}/*! + * pinia v3.0.3 + * (c) 2025 Eduardo San Martin Morote + * @license MIT + */let pc;const hs=e=>pc=e,gc=Symbol();function hr(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var Oo;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(Oo||(Oo={}));function $p(){const e=os(!0),t=e.run(()=>te({}));let n=[],o=[];const i=an({install(s){hs(i),i._a=s,s.provide(gc,i),s.config.globalProperties.$pinia=i,o.forEach(r=>n.push(r)),o=[]},use(s){return this._a?n.push(s):o.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}const vc=()=>{};function ea(e,t,n,o=vc){e.push(t);const i=()=>{const s=e.indexOf(t);s>-1&&(e.splice(s,1),o())};return!n&&is()&&To(i),i}function Wn(e,...t){e.slice().forEach(n=>{n(...t)})}const Ip=e=>e(),ta=Symbol(),Ls=Symbol();function pr(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],i=e[n];hr(i)&&hr(o)&&e.hasOwnProperty(n)&&!Oe(o)&&!ln(o)?e[n]=pr(i,o):e[n]=o}return e}const kp=Symbol();function Pp(e){return!hr(e)||!Object.prototype.hasOwnProperty.call(e,kp)}const{assign:yn}=Object;function Ap(e){return!!(Oe(e)&&e.effect)}function Dp(e,t,n,o){const{state:i,actions:s,getters:r}=t,l=n.state.value[e];let a;function u(){l||(n.state.value[e]=i?i():{});const c=_u(n.state.value[e]);return yn(c,s,Object.keys(r||{}).reduce((d,p)=>(d[p]=an(pe(()=>{hs(n);const h=n._s.get(e);return r[p].call(h,h)})),d),{}))}return a=mc(e,u,t,n,o,!0),a}function mc(e,t,n={},o,i,s){let r;const l=yn({actions:{}},n),a={deep:!0};let u,c,d=[],p=[],h;const b=o.state.value[e];!s&&!b&&(o.state.value[e]={}),te({});let E;function N(H){let F;u=c=!1,typeof H=="function"?(H(o.state.value[e]),F={type:Oo.patchFunction,storeId:e,events:h}):(pr(o.state.value[e],H),F={type:Oo.patchObject,payload:H,storeId:e,events:h});const Z=E=Symbol();ht().then(()=>{E===Z&&(u=!0)}),c=!0,Wn(d,F,o.state.value[e])}const M=s?function(){const{state:F}=n,Z=F?F():{};this.$patch(j=>{yn(j,Z)})}:vc;function P(){r.stop(),d=[],p=[],o._s.delete(e)}const g=(H,F="")=>{if(ta in H)return H[Ls]=F,H;const Z=function(){hs(o);const j=Array.from(arguments),C=[],ee=[];function T(L){C.push(L)}function G(L){ee.push(L)}Wn(p,{args:j,name:Z[Ls],store:O,after:T,onError:G});let k;try{k=H.apply(this&&this.$id===e?this:O,j)}catch(L){throw Wn(ee,L),L}return k instanceof Promise?k.then(L=>(Wn(C,L),L)).catch(L=>(Wn(ee,L),Promise.reject(L))):(Wn(C,k),k)};return Z[ta]=!0,Z[Ls]=F,Z},_={_p:o,$id:e,$onAction:ea.bind(null,p),$patch:N,$reset:M,$subscribe(H,F={}){const Z=ea(d,H,F.detached,()=>j()),j=r.run(()=>xe(()=>o.state.value[e],C=>{(F.flush==="sync"?c:u)&&H({storeId:e,type:Oo.direct,events:h},C)},yn({},a,F)));return Z},$dispose:P},O=go(_);o._s.set(e,O);const X=(o._a&&o._a.runWithContext||Ip)(()=>o._e.run(()=>(r=os()).run(()=>t({action:g}))));for(const H in X){const F=X[H];if(Oe(F)&&!Ap(F)||ln(F))s||(b&&Pp(F)&&(Oe(F)?F.value=b[H]:pr(F,b[H])),o.state.value[e][H]=F);else if(typeof F=="function"){const Z=g(F,H);X[H]=Z,l.actions[H]=F}}return yn(O,X),yn(Se(O),X),Object.defineProperty(O,"$state",{get:()=>o.state.value[e],set:H=>{N(F=>{yn(F,H)})}}),o._p.forEach(H=>{yn(O,r.run(()=>H({store:O,app:o._a,pinia:o,options:l})))}),b&&s&&n.hydrate&&n.hydrate(O.$state,b),u=!0,c=!0,O}/*! #__NO_SIDE_EFFECTS__ */function yc(e,t,n){let o;const i=typeof t=="function";o=i?n:t;function s(r,l){const a=fh();return r=r||(a?mt(gc,null):null),r&&hs(r),r=pc,r._s.has(e)||(i?mc(e,t,o,r):Dp(e,o,r)),r._s.get(e)}return s.$id=e,s}function Op(e){const t=Se(e),n={};for(const o in t){const i=t[o];i.effect?n[o]=pe({get:()=>e[o],set(s){e[o]=s}}):(Oe(i)||ln(i))&&(n[o]=Ve(e,o))}return n}var Rp=Object.defineProperty,na=Object.getOwnPropertySymbols,Vp=Object.prototype.hasOwnProperty,Bp=Object.prototype.propertyIsEnumerable,oa=(e,t,n)=>t in e?Rp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,_c=(e,t)=>{for(var n in t||(t={}))Vp.call(t,n)&&oa(e,n,t[n]);if(na)for(var n of na(t))Bp.call(t,n)&&oa(e,n,t[n]);return e},ps=e=>typeof e=="function",gs=e=>typeof e=="string",bc=e=>gs(e)&&e.trim().length>0,Lp=e=>typeof e=="number",On=e=>typeof e>"u",Ko=e=>typeof e=="object"&&e!==null,Fp=e=>zt(e,"tag")&&bc(e.tag),wc=e=>window.TouchEvent&&e instanceof TouchEvent,xc=e=>zt(e,"component")&&Ec(e.component),zp=e=>ps(e)||Ko(e),Ec=e=>!On(e)&&(gs(e)||zp(e)||xc(e)),ia=e=>Ko(e)&&["height","width","right","left","top","bottom"].every(t=>Lp(e[t])),zt=(e,t)=>(Ko(e)||ps(e))&&t in e,Hp=(e=>()=>e++)(0);function Fs(e){return wc(e)?e.targetTouches[0].clientX:e.clientX}function sa(e){return wc(e)?e.targetTouches[0].clientY:e.clientY}var Up=e=>{On(e.remove)?e.parentNode&&e.parentNode.removeChild(e):e.remove()},si=e=>xc(e)?si(e.component):Fp(e)?he({render(){return e}}):typeof e=="string"?e:Se(oe(e)),Gp=e=>{if(typeof e=="string")return e;const t=zt(e,"props")&&Ko(e.props)?e.props:{},n=zt(e,"listeners")&&Ko(e.listeners)?e.listeners:{};return{component:si(e),props:t,listeners:n}},jp=()=>typeof window<"u",qr=class{constructor(){this.allHandlers={}}getHandlers(e){return this.allHandlers[e]||[]}on(e,t){const n=this.getHandlers(e);n.push(t),this.allHandlers[e]=n}off(e,t){const n=this.getHandlers(e);n.splice(n.indexOf(t)>>>0,1)}emit(e,t){this.getHandlers(e).forEach(o=>o(t))}},Yp=e=>["on","off","emit"].every(t=>zt(e,t)&&ps(e[t])),dt;(function(e){e.SUCCESS="success",e.ERROR="error",e.WARNING="warning",e.INFO="info",e.DEFAULT="default"})(dt||(dt={}));var Xo;(function(e){e.TOP_LEFT="top-left",e.TOP_CENTER="top-center",e.TOP_RIGHT="top-right",e.BOTTOM_LEFT="bottom-left",e.BOTTOM_CENTER="bottom-center",e.BOTTOM_RIGHT="bottom-right"})(Xo||(Xo={}));var ft;(function(e){e.ADD="add",e.DISMISS="dismiss",e.UPDATE="update",e.CLEAR="clear",e.UPDATE_DEFAULTS="update_defaults"})(ft||(ft={}));var Et="Vue-Toastification",bt={type:{type:String,default:dt.DEFAULT},classNames:{type:[String,Array],default:()=>[]},trueBoolean:{type:Boolean,default:!0}},Sc={type:bt.type,customIcon:{type:[String,Boolean,Object,Function],default:!0}},Ti={component:{type:[String,Object,Function,Boolean],default:"button"},classNames:bt.classNames,showOnHover:{type:Boolean,default:!1},ariaLabel:{type:String,default:"close"}},gr={timeout:{type:[Number,Boolean],default:5e3},hideProgressBar:{type:Boolean,default:!1},isRunning:{type:Boolean,default:!1}},Cc={transition:{type:[Object,String],default:`${Et}__bounce`}},Kp={position:{type:String,default:Xo.TOP_RIGHT},draggable:bt.trueBoolean,draggablePercent:{type:Number,default:.6},pauseOnFocusLoss:bt.trueBoolean,pauseOnHover:bt.trueBoolean,closeOnClick:bt.trueBoolean,timeout:gr.timeout,hideProgressBar:gr.hideProgressBar,toastClassName:bt.classNames,bodyClassName:bt.classNames,icon:Sc.customIcon,closeButton:Ti.component,closeButtonClassName:Ti.classNames,showCloseButtonOnHover:Ti.showOnHover,accessibility:{type:Object,default:()=>({toastRole:"alert",closeButtonLabel:"close"})},rtl:{type:Boolean,default:!1},eventBus:{type:Object,required:!1,default:()=>new qr}},Xp={id:{type:[String,Number],required:!0,default:0},type:bt.type,content:{type:[String,Object,Function],required:!0,default:""},onClick:{type:Function,default:void 0},onClose:{type:Function,default:void 0}},Wp={container:{type:[Object,Function],default:()=>document.body},newestOnTop:bt.trueBoolean,maxToasts:{type:Number,default:20},transition:Cc.transition,toastDefaults:Object,filterBeforeCreate:{type:Function,default:e=>e},filterToasts:{type:Function,default:e=>e},containerClassName:bt.classNames,onMounted:Function,shareAppContext:[Boolean,Object]},cn={CORE_TOAST:Kp,TOAST:Xp,CONTAINER:Wp,PROGRESS_BAR:gr,ICON:Sc,TRANSITION:Cc,CLOSE_BUTTON:Ti},Nc=he({name:"VtProgressBar",props:cn.PROGRESS_BAR,data(){return{hasClass:!0}},computed:{style(){return{animationDuration:`${this.timeout}ms`,animationPlayState:this.isRunning?"running":"paused",opacity:this.hideProgressBar?0:1}},cpClass(){return this.hasClass?`${Et}__progress-bar`:""}},watch:{timeout(){this.hasClass=!1,this.$nextTick(()=>this.hasClass=!0)}},mounted(){this.$el.addEventListener("animationend",this.animationEnded)},beforeUnmount(){this.$el.removeEventListener("animationend",this.animationEnded)},methods:{animationEnded(){this.$emit("close-toast")}}});function Zp(e,t){return z(),W("div",{style:at(e.style),class:ze(e.cpClass)},null,6)}Nc.render=Zp;var qp=Nc,Tc=he({name:"VtCloseButton",props:cn.CLOSE_BUTTON,computed:{buttonComponent(){return this.component!==!1?si(this.component):"button"},classes(){const e=[`${Et}__close-button`];return this.showOnHover&&e.push("show-on-hover"),e.concat(this.classNames)}}}),Jp=Be(" × ");function Qp(e,t){return z(),Re(vo(e.buttonComponent),Mn({"aria-label":e.ariaLabel,class:e.classes},e.$attrs),{default:Ut(()=>[Jp]),_:1},16,["aria-label","class"])}Tc.render=Qp;var eg=Tc,Mc={},tg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"check-circle",class:"svg-inline--fa fa-check-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},ng=x("path",{fill:"currentColor",d:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"},null,-1),og=[ng];function ig(e,t){return z(),W("svg",tg,og)}Mc.render=ig;var sg=Mc,$c={},rg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"info-circle",class:"svg-inline--fa fa-info-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},lg=x("path",{fill:"currentColor",d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"},null,-1),ag=[lg];function ug(e,t){return z(),W("svg",rg,ag)}$c.render=ug;var ra=$c,Ic={},cg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-circle",class:"svg-inline--fa fa-exclamation-circle fa-w-16",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},dg=x("path",{fill:"currentColor",d:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),fg=[dg];function hg(e,t){return z(),W("svg",cg,fg)}Ic.render=hg;var pg=Ic,kc={},gg={"aria-hidden":"true",focusable:"false","data-prefix":"fas","data-icon":"exclamation-triangle",class:"svg-inline--fa fa-exclamation-triangle fa-w-18",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512"},vg=x("path",{fill:"currentColor",d:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"},null,-1),mg=[vg];function yg(e,t){return z(),W("svg",gg,mg)}kc.render=yg;var _g=kc,Pc=he({name:"VtIcon",props:cn.ICON,computed:{customIconChildren(){return zt(this.customIcon,"iconChildren")?this.trimValue(this.customIcon.iconChildren):""},customIconClass(){return gs(this.customIcon)?this.trimValue(this.customIcon):zt(this.customIcon,"iconClass")?this.trimValue(this.customIcon.iconClass):""},customIconTag(){return zt(this.customIcon,"iconTag")?this.trimValue(this.customIcon.iconTag,"i"):"i"},hasCustomIcon(){return this.customIconClass.length>0},component(){return this.hasCustomIcon?this.customIconTag:Ec(this.customIcon)?si(this.customIcon):this.iconTypeComponent},iconTypeComponent(){return{[dt.DEFAULT]:ra,[dt.INFO]:ra,[dt.SUCCESS]:sg,[dt.ERROR]:_g,[dt.WARNING]:pg}[this.type]},iconClasses(){const e=[`${Et}__icon`];return this.hasCustomIcon?e.concat(this.customIconClass):e}},methods:{trimValue(e,t=""){return bc(e)?e.trim():t}}});function bg(e,t){return z(),Re(vo(e.component),{class:ze(e.iconClasses)},{default:Ut(()=>[Be(Ae(e.customIconChildren),1)]),_:1},8,["class"])}Pc.render=bg;var wg=Pc,Ac=he({name:"VtToast",components:{ProgressBar:qp,CloseButton:eg,Icon:wg},inheritAttrs:!1,props:Object.assign({},cn.CORE_TOAST,cn.TOAST),data(){return{isRunning:!0,disableTransitions:!1,beingDragged:!1,dragStart:0,dragPos:{x:0,y:0},dragRect:{}}},computed:{classes(){const e=[`${Et}__toast`,`${Et}__toast--${this.type}`,`${this.position}`].concat(this.toastClassName);return this.disableTransitions&&e.push("disable-transition"),this.rtl&&e.push(`${Et}__toast--rtl`),e},bodyClasses(){return[`${Et}__toast-${gs(this.content)?"body":"component-body"}`].concat(this.bodyClassName)},draggableStyle(){return this.dragStart===this.dragPos.x?{}:this.beingDragged?{transform:`translateX(${this.dragDelta}px)`,opacity:1-Math.abs(this.dragDelta/this.removalDistance)}:{transition:"transform 0.2s, opacity 0.2s",transform:"translateX(0)",opacity:1}},dragDelta(){return this.beingDragged?this.dragPos.x-this.dragStart:0},removalDistance(){return ia(this.dragRect)?(this.dragRect.right-this.dragRect.left)*this.draggablePercent:0}},mounted(){this.draggable&&this.draggableSetup(),this.pauseOnFocusLoss&&this.focusSetup()},beforeUnmount(){this.draggable&&this.draggableCleanup(),this.pauseOnFocusLoss&&this.focusCleanup()},methods:{hasProp:zt,getVueComponentFromObj:si,closeToast(){this.eventBus.emit(ft.DISMISS,this.id)},clickHandler(){this.onClick&&this.onClick(this.closeToast),this.closeOnClick&&(!this.beingDragged||this.dragStart===this.dragPos.x)&&this.closeToast()},timeoutHandler(){this.closeToast()},hoverPause(){this.pauseOnHover&&(this.isRunning=!1)},hoverPlay(){this.pauseOnHover&&(this.isRunning=!0)},focusPause(){this.isRunning=!1},focusPlay(){this.isRunning=!0},focusSetup(){addEventListener("blur",this.focusPause),addEventListener("focus",this.focusPlay)},focusCleanup(){removeEventListener("blur",this.focusPause),removeEventListener("focus",this.focusPlay)},draggableSetup(){const e=this.$el;e.addEventListener("touchstart",this.onDragStart,{passive:!0}),e.addEventListener("mousedown",this.onDragStart),addEventListener("touchmove",this.onDragMove,{passive:!1}),addEventListener("mousemove",this.onDragMove),addEventListener("touchend",this.onDragEnd),addEventListener("mouseup",this.onDragEnd)},draggableCleanup(){const e=this.$el;e.removeEventListener("touchstart",this.onDragStart),e.removeEventListener("mousedown",this.onDragStart),removeEventListener("touchmove",this.onDragMove),removeEventListener("mousemove",this.onDragMove),removeEventListener("touchend",this.onDragEnd),removeEventListener("mouseup",this.onDragEnd)},onDragStart(e){this.beingDragged=!0,this.dragPos={x:Fs(e),y:sa(e)},this.dragStart=Fs(e),this.dragRect=this.$el.getBoundingClientRect()},onDragMove(e){this.beingDragged&&(e.preventDefault(),this.isRunning&&(this.isRunning=!1),this.dragPos={x:Fs(e),y:sa(e)})},onDragEnd(){this.beingDragged&&(Math.abs(this.dragDelta)>=this.removalDistance?(this.disableTransitions=!0,this.$nextTick(()=>this.closeToast())):setTimeout(()=>{this.beingDragged=!1,ia(this.dragRect)&&this.pauseOnHover&&this.dragRect.bottom>=this.dragPos.y&&this.dragPos.y>=this.dragRect.top&&this.dragRect.left<=this.dragPos.x&&this.dragPos.x<=this.dragRect.right?this.isRunning=!1:this.isRunning=!0}))}}}),xg=["role"];function Eg(e,t){const n=Bn("Icon"),o=Bn("CloseButton"),i=Bn("ProgressBar");return z(),W("div",{class:ze(e.classes),style:at(e.draggableStyle),onClick:t[0]||(t[0]=(...s)=>e.clickHandler&&e.clickHandler(...s)),onMouseenter:t[1]||(t[1]=(...s)=>e.hoverPause&&e.hoverPause(...s)),onMouseleave:t[2]||(t[2]=(...s)=>e.hoverPlay&&e.hoverPlay(...s))},[e.icon?(z(),Re(n,{key:0,"custom-icon":e.icon,type:e.type},null,8,["custom-icon","type"])):Ne("v-if",!0),x("div",{role:e.accessibility.toastRole||"alert",class:ze(e.bodyClasses)},[typeof e.content=="string"?(z(),W(_e,{key:0},[Be(Ae(e.content),1)],2112)):(z(),Re(vo(e.getVueComponentFromObj(e.content)),Mn({key:1,"toast-id":e.id},e.hasProp(e.content,"props")?e.content.props:{},eh(e.hasProp(e.content,"listeners")?e.content.listeners:{}),{onCloseToast:e.closeToast}),null,16,["toast-id","onCloseToast"]))],10,xg),e.closeButton?(z(),Re(o,{key:1,component:e.closeButton,"class-names":e.closeButtonClassName,"show-on-hover":e.showCloseButtonOnHover,"aria-label":e.accessibility.closeButtonLabel,onClick:Do(e.closeToast,["stop"])},null,8,["component","class-names","show-on-hover","aria-label","onClick"])):Ne("v-if",!0),e.timeout?(z(),Re(i,{key:2,"is-running":e.isRunning,"hide-progress-bar":e.hideProgressBar,timeout:e.timeout,onCloseToast:e.timeoutHandler},null,8,["is-running","hide-progress-bar","timeout","onCloseToast"])):Ne("v-if",!0)],38)}Ac.render=Eg;var Sg=Ac,Dc=he({name:"VtTransition",props:cn.TRANSITION,emits:["leave"],methods:{hasProp:zt,leave(e){e instanceof HTMLElement&&(e.style.left=e.offsetLeft+"px",e.style.top=e.offsetTop+"px",e.style.width=getComputedStyle(e).width,e.style.position="absolute")}}});function Cg(e,t){return z(),Re(vp,{tag:"div","enter-active-class":e.transition.enter?e.transition.enter:`${e.transition}-enter-active`,"move-class":e.transition.move?e.transition.move:`${e.transition}-move`,"leave-active-class":e.transition.leave?e.transition.leave:`${e.transition}-leave-active`,onLeave:e.leave},{default:Ut(()=>[Ct(e.$slots,"default")]),_:3},8,["enter-active-class","move-class","leave-active-class","onLeave"])}Dc.render=Cg;var Ng=Dc,Oc=he({name:"VueToastification",devtools:{hide:!0},components:{Toast:Sg,VtTransition:Ng},props:Object.assign({},cn.CORE_TOAST,cn.CONTAINER,cn.TRANSITION),data(){return{count:0,positions:Object.values(Xo),toasts:{},defaults:{}}},computed:{toastArray(){return Object.values(this.toasts)},filteredToasts(){return this.defaults.filterToasts(this.toastArray)}},beforeMount(){const e=this.eventBus;e.on(ft.ADD,this.addToast),e.on(ft.CLEAR,this.clearToasts),e.on(ft.DISMISS,this.dismissToast),e.on(ft.UPDATE,this.updateToast),e.on(ft.UPDATE_DEFAULTS,this.updateDefaults),this.defaults=this.$props},mounted(){this.setup(this.container)},methods:{async setup(e){ps(e)&&(e=await e()),Up(this.$el),e.appendChild(this.$el)},setToast(e){On(e.id)||(this.toasts[e.id]=e)},addToast(e){e.content=Gp(e.content);const t=Object.assign({},this.defaults,e.type&&this.defaults.toastDefaults&&this.defaults.toastDefaults[e.type],e),n=this.defaults.filterBeforeCreate(t,this.toastArray);n&&this.setToast(n)},dismissToast(e){const t=this.toasts[e];!On(t)&&!On(t.onClose)&&t.onClose(),delete this.toasts[e]},clearToasts(){Object.keys(this.toasts).forEach(e=>{this.dismissToast(e)})},getPositionToasts(e){const t=this.filteredToasts.filter(n=>n.position===e).slice(0,this.defaults.maxToasts);return this.defaults.newestOnTop?t.reverse():t},updateDefaults(e){On(e.container)||this.setup(e.container),this.defaults=Object.assign({},this.defaults,e)},updateToast({id:e,options:t,create:n}){this.toasts[e]?(t.timeout&&t.timeout===this.toasts[e].timeout&&t.timeout++,this.setToast(Object.assign({},this.toasts[e],t))):n&&this.addToast(Object.assign({},{id:e},t))},getClasses(e){return[`${Et}__container`,e].concat(this.defaults.containerClassName)}}});function Tg(e,t){const n=Bn("Toast"),o=Bn("VtTransition");return z(),W("div",null,[(z(!0),W(_e,null,Ye(e.positions,i=>(z(),W("div",{key:i},[Me(o,{transition:e.defaults.transition,class:ze(e.getClasses(i))},{default:Ut(()=>[(z(!0),W(_e,null,Ye(e.getPositionToasts(i),s=>(z(),Re(n,Mn({key:s.id},s),null,16))),128))]),_:2},1032,["transition","class"])]))),128))])}Oc.render=Tg;var Mg=Oc,la=(e={},t=!0)=>{const n=e.eventBus=e.eventBus||new qr;t&&ht(()=>{const s=hc(Mg,_c({},e)),r=s.mount(document.createElement("div")),l=e.onMounted;if(On(l)||l(r,s),e.shareAppContext){const a=e.shareAppContext;a===!0?console.warn(`[${Et}] App to share context with was not provided.`):(s._context.components=a._context.components,s._context.directives=a._context.directives,s._context.mixins=a._context.mixins,s._context.provides=a._context.provides,s.config.globalProperties=a.config.globalProperties)}});const o=(s,r)=>{const l=Object.assign({},{id:Hp(),type:dt.DEFAULT},r,{content:s});return n.emit(ft.ADD,l),l.id};o.clear=()=>n.emit(ft.CLEAR,void 0),o.updateDefaults=s=>{n.emit(ft.UPDATE_DEFAULTS,s)},o.dismiss=s=>{n.emit(ft.DISMISS,s)};function i(s,{content:r,options:l},a=!1){const u=Object.assign({},l,{content:r});n.emit(ft.UPDATE,{id:s,options:u,create:a})}return o.update=i,o.success=(s,r)=>o(s,Object.assign({},r,{type:dt.SUCCESS})),o.info=(s,r)=>o(s,Object.assign({},r,{type:dt.INFO})),o.error=(s,r)=>o(s,Object.assign({},r,{type:dt.ERROR})),o.warning=(s,r)=>o(s,Object.assign({},r,{type:dt.WARNING})),o},$g=()=>{const e=()=>console.warn(`[${Et}] This plugin does not support SSR!`);return new Proxy(e,{get(){return e}})};function Rc(e){return jp()?Yp(e)?la({eventBus:e},!1):la(e,!0):$g()}var Vc=Symbol("VueToastification"),Bc=new qr,Ig=(e,t)=>{t?.shareAppContext===!0&&(t.shareAppContext=e);const n=Rc(_c({eventBus:Bc},t));e.provide(Vc,n)},kg=e=>{const t=Xt()?mt(Vc,void 0):void 0;return t||Rc(Bc)},Pg=Ig;const Ag={class:"StepWizard"},Dg={class:"step-indicators"},Og=["onClick"],Rg={class:"step-content"},Vg={class:"step-actions"},Bg=he({__name:"StepWizard",props:{steps:{type:Array,required:!0}},setup(e){const t=e,n=te(0),o=()=>{n.value{s>=0&&s(z(),W("div",Ag,[x("div",Dg,[(z(!0),W(_e,null,Ye(e.steps,(l,a)=>(z(),W("div",{key:a,class:ze(["step",{active:n.value===a,completed:n.value>a}]),onClick:u=>i(a)},null,10,Og))),128))]),x("div",Rg,[(z(),Re(vo(e.steps[n.value])))]),x("div",Vg,[n.value>0?(z(),W("button",{key:0,onClick:r[0]||(r[0]=l=>n.value--),class:"btn prev-btn"},"Previous")):Ne("",!0),n.value{const n=e.__vccOpts||e;for(const[o,i]of t)n[o]=i;return n},Lg=Xe(Bg,[["__scopeId","data-v-9f8c12c9"]]),_t=yc("projectSpec",()=>{const e=te({project_name:"asd",database:"",models:[],custom_enums:[]}),t=te(!1),n=te([{name:"UserRole",values:[{name:"ADMIN",value:"ADMIN"},{name:"USER",value:"auto()"}]}]),o=te([{id:"user",data:{fields:[{name:"id",type:"UUID",isPrimaryKey:!0,defaultValue:"uuid.uuid4"},{name:"name",type:"String"},{name:"email",type:"String"},{name:"role",type:"Enum",typeEnum:"UserRole",defaultValue:"ADMIN"},{name:"created_at",type:"DateTime"},{name:"updated_at",type:"DateTime"}],relations:[{fieldName:"post_id",targetModel:"post",onDelete:"CASCADE",isNullable:!1,isUnique:!1,isIndex:!1}]},type:"custom",position:{x:50,y:50}},{id:"post",data:{fields:[{name:"id",type:"UUID",isPrimaryKey:!0,defaultValue:"uuid.uuid4"},{name:"created_at",type:"DateTime"},{name:"updated_at",type:"DateTime"}],relations:[]},type:"custom",position:{x:150,y:355}}]),i=te([{id:"(user)-(post)-(post_id)",source:"user",target:"post",type:"smoothstep"}]),s=()=>{const $=o.value.map(V=>{const Y=V.id,J=V.data.fields.map(Q=>({name:Q.name,type:Q.type,type_enum:Q.typeEnum??null,primary_key:Q.isPrimaryKey??!1,nullable:Q.isNullable??!1,unique:Q.isUnique??!1,index:Q.isIndex??!1,default_value:Q.defaultValue??null,extra_kwargs:null,metadata:{is_created_at_timestamp:Q.name==="created_at",is_updated_at_timestamp:Q.name==="updated_at",is_foreign_key:!1}})),ue=V.data.relations.map(Q=>({field_name:Q.fieldName,target_model:Q.targetModel,back_populates:null,on_delete:Q.onDelete??"CASCADE",nullable:Q.isNullable??!1,unique:Q.isUnique??!1,index:Q.isIndex??!1}));return{name:Y,fields:J,relationships:ue,metadata:{create_endpoints:!0,create_tests:!0,create_daos:!0,create_dtos:!0,is_auth_model:!1}}}),D=n.value.map(V=>({name:V.name,values:V.values.map(Y=>({name:Y.name,value:Y.value}))}));return{project_name:e.value.project_name,use_postgres:!0,use_alembic:!0,models:$,custom_enums:D}},r=async()=>{const $=s();try{const D=await fetch("http://localhost:8000/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($)});if(!D.ok){const Y=await D.text();throw new Error(`Error ${D.status}: ${Y}`)}const V=await D.json();return console.log("Generation successful:",V),V}catch(D){throw console.error("Generation failed:",D),D}},l=$=>o.value.find(D=>D.id===$),a=$=>{l($)||o.value.push({id:$,data:{fields:[],relations:[]},type:"custom",position:{x:100,y:100}})},u=$=>{l($)&&(o.value=o.value.filter(V=>V.id!==$),i.value=i.value.filter(V=>V.source!==$&&V.target!==$),o.value.forEach(V=>{V.data.relations&&(V.data.relations=V.data.relations?.filter(Y=>Y.targetModel!==$))}))},c=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);if(l(D))throw new Error(`Duplicate name: ${D}`);V.id=D,i.value.forEach(J=>{J.source===$&&(J.source=D),J.target===$&&(J.target=D),J.id=J.id.replace(`(${$})`,`(${D})`)}),o.value.forEach(J=>{J.data.relations.forEach(ue=>{ue.targetModel===$&&(ue.targetModel=D)})})},d=($,D)=>{const V=$.data.fields.find(J=>J.name===D),Y=$.data.relations.find(J=>J.fieldName===D);return!!V||!!Y},p=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);if(d(V,D.name))throw new Error(`Field name already exists for model: ${$}`);V.data.fields.push(D)},h=($,D,V)=>{const Y=l($);if(!Y)throw new Error(`Model does not exist: ${$}`);const J=Y.data.fields.findIndex(ue=>ue.name===D);if(J===-1)throw new Error(`Field does not exist: ${D}`);Y.data.fields[J]=V,console.log(V)},b=($,D)=>{const V=l($);if(!V)throw new Error(`Model does not exist: ${$}`);V.data.fields=V.data.fields.filter(Y=>Y.name!==D)},E=($,D,V)=>{const Y=l($);Y&&(_($,D,V.fieldName),Y.data.relations.push(V))},N=($,D,V)=>{const Y=l($);Y&&(Y.data.relations=Y.data.relations.filter(J=>J.fieldName!==V),O($,D,V))},M=($,D,V,Y)=>{const J=l($);if(!J||!J.data.relations)return;const ue=J.data.relations.findIndex(me=>me.fieldName===V);J.data.relations[ue]=Y;const Q=g($,D,V),ie=P(Q);if(!ie)return;const le=g($,Y.targetModel,Y.fieldName);ie.id=le,ie.source=$,ie.target=Y.targetModel},P=$=>i.value.find(D=>D.id===$),g=($,D,V)=>`(${$})-(${D})-(${V})`,_=($,D,V)=>{$!==D&&i.value.push({id:g($,D,V),source:$,target:D,type:"smoothstep"})},O=($,D,V)=>{i.value=i.value.filter(Y=>Y.id!==g($,D,V))},U=$=>{const D=n.value.find(V=>V.name===$);if(!D)throw Error(`Enum not found: ${$}`);return D},X=($,D)=>{const Y=U($).values.find(J=>J.name===D);if(!Y)throw Error(`EnumValue not found: ${D}`);return Y};return{nodes:o,edges:i,enums:n,createNode:a,createEdge:_,deleteNode:u,renameNode:c,addField:p,deleteField:b,updateField:h,addRelation:E,deleteRelation:N,updateRelation:M,projectSpec:e,isProjectNameConfirmed:t,setProjectName:$=>{e.value.project_name=$},getProjectName:()=>e.value.project_name,setDatabase:$=>{e.value.database=$},getDatabase:()=>e.value.database,findNodeById:l,findEnumByName:U,addEnum:$=>{const D={name:$,values:[]};return n.value.push(D),D},updateEnumName:($,D)=>{const V=U($);V.name=D,o.value.forEach(Y=>{Y.data.fields.forEach(J=>{J.type==="Enum"&&J.typeEnum===$&&(J.typeEnum=D)})})},deleteEnum:$=>{n.value=n.value.filter(D=>D.name!==$),o.value.forEach(D=>{D.data.fields=D.data.fields.filter(V=>V.typeEnum!==$)})},addEnumValue:($,D)=>{U($).values.push(D)},updateEnumValue:($,D,V)=>{const Y=X($,D);Y.name=V.name,Y.value=V.value,console.log($),console.log(V),o.value.forEach(J=>{J.data.fields.forEach(ue=>{ue.type==="Enum"&&ue.typeEnum===$&&(ue.defaultValue=V.name)})})},deleteEnumValue:($,D)=>{const V=U($);V.values=V.values.filter(Y=>Y.name!==D)},convertNodesToModel:s,callGenerateEndpoint:r}}),jt={boundedStr:/^.{1,100}$/,snakeCase:/^[a-z][a-z0-9_]*$/,pascalCase:/^[A-Z][a-z]*$/,variableStr:/^[a-zA-Z_][a-zA-Z0-9_-]*$/},Fg=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),Lc=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),aa=e=>jt.boundedStr.test(e)&&jt.pascalCase.test(e),Fc=e=>jt.boundedStr.test(e)&&jt.variableStr.test(e),vs=e=>jt.boundedStr.test(e)&&jt.snakeCase.test(e),Yt={modelName:"Use 1-100 characters. Start with a letter or underscore. Example: userModel_1",enumName:"Use PascalCase (start with uppercase). Example: UserStatus",enumValueName:"Use 1-100 characters. Start with a letter or underscore. Example: active_status",fieldName:"Use lowercase snake_case. Example: user_name"},zg={class:"container"},Hg={class:"input-group"},Ug={class:"input-horizontal"},Gg=["value","disabled"],jg=["disabled"],Yg={key:0,class:"error-message"},Kg=he({__name:"ProjectNameStep",setup(e){const t=_t(),n=te("asd"),o=te(!1),i=te(""),s=l=>{if(n.value=l.target.value,n.value.length===0){o.value=!1;return}Fg(n.value)?o.value=!1:(o.value=!0,i.value="Name must start with a letter/underscore and only contain letters, numbers, -, or _")},r=()=>{if(t.isProjectNameConfirmed){t.isProjectNameConfirmed=!1,t.setProjectName("");return}!n.value||o.value||(t.setProjectName(n.value),t.isProjectNameConfirmed=!0)};return ut(()=>{t.getProjectName()&&(n.value=t.getProjectName())}),(l,a)=>(z(),W("main",zg,[a[2]||(a[2]=x("h1",null,"Choose a Project Name",-1)),a[3]||(a[3]=x("br",null,null,-1)),x("div",Hg,[a[1]||(a[1]=x("div",{class:"label-group"},[x("label",{class:"project-name-label",for:"project-name"},"Project Name")],-1)),x("div",Ug,[x("input",{class:ze(["project-name",{confirmed:oe(t).isProjectNameConfirmed,"input-error":o.value}]),type:"text",placeholder:"Enter your project name",value:n.value,onInput:a[0]||(a[0]=u=>s(u)),disabled:oe(t).isProjectNameConfirmed,maxlength:"100"},null,42,Gg),x("button",{class:ze(["confirm-btn",{confirmed:oe(t).isProjectNameConfirmed}]),onClick:r,disabled:o.value||!n.value}," Confirm ",10,jg)]),o.value?(z(),W("div",Yg,Ae(i.value),1)):Ne("",!0)])]))}}),Xg=Xe(Kg,[["__scopeId","data-v-cad93208"]]),Wg={class:"container"},Zg={class:"db-grid-container"},qg={class:"db-grid"},Jg=["onClick"],Qg=he({__name:"DatabaseStep",setup(e){const t=_t(),n=["PostgreSQL","MySQL","SQLite"],o=i=>{i==="PostgreSQL"&&t.setDatabase(t.getDatabase()===i?"":i)};return ut(()=>{t.getDatabase()&&t.getDatabase()!=="PostgreSQL"&&t.setDatabase("")}),(i,s)=>(z(),W("main",Wg,[s[0]||(s[0]=x("h1",null,"Choose a Database",-1)),s[1]||(s[1]=x("br",null,null,-1)),x("div",Zg,[x("div",qg,[(z(),W(_e,null,Ye(n,r=>x("div",{class:ze(["db-item",{confirmed:oe(t).getDatabase()===r,disabled:r!=="PostgreSQL",enabled:r==="PostgreSQL"}]),key:r,onClick:l=>o(r)},[x("span",null,Ae(r),1)],10,Jg)),64))])])]))}}),ev=Xe(Qg,[["__scopeId","data-v-9256ee53"]]),tv={class:"custom-node"},nv={class:"custom-node-header"},ov={class:"custom-node-title"},iv={key:0,class:"dropdown-list"},sv={class:"custom-node-body nodrag"},rv=["onClick"],lv={class:"custom-node-field-name"},av={key:0,class:"custom-node-field-type"},uv={key:1,class:"custom-node-field-type"},cv=["onClick"],dv={class:"custom-node-field-name"},fv={class:"custom-node-field-type"},hv=he({__name:"CustomNode",props:{id:{},data:{}},setup(e){const t=e,n=te(!1),o=()=>{n.value=!0},i=()=>{n.value=!1};return(s,r)=>(z(),W("div",tv,[x("div",nv,[x("div",ov,Ae(s.id),1),x("div",{class:"custom-node-actions nodrag",onMouseover:o,onMouseleave:i},[r[4]||(r[4]=x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-ellipsis"},[x("circle",{cx:"12",cy:"12",r:"1"}),x("circle",{cx:"19",cy:"12",r:"1"}),x("circle",{cx:"5",cy:"12",r:"1"})],-1)),n.value?(z(),W("div",iv,[x("div",{class:"dropdown-item",onClick:r[0]||(r[0]=l=>s.$emit("add-field",t.id))},"Add Field"),x("div",{class:"dropdown-item",onClick:r[1]||(r[1]=l=>s.$emit("add-relation",t.id))},"Add Relation"),x("div",{class:"dropdown-item",onClick:r[2]||(r[2]=l=>s.$emit("rename-node",t.id))},"Rename"),x("div",{class:"dropdown-item",onClick:r[3]||(r[3]=l=>s.$emit("delete-node",t.id))},"Delete")])):Ne("",!0)],32)]),x("div",sv,[(z(!0),W(_e,null,Ye(s.data.fields,l=>(z(),W("div",{key:l.name,class:"custom-node-field-row",onClick:a=>s.$emit("open-edit-field-modal",t.id,l)},[x("div",lv,Ae(l.name),1),l.type!=="Enum"?(z(),W("div",av,Ae(l.type),1)):(z(),W("div",uv,Ae(l.type)+"("+Ae(l.typeEnum)+")",1))],8,rv))),128)),(z(!0),W(_e,null,Ye(s.data.relations,l=>(z(),W("div",{key:l.fieldName,class:"custom-node-field-row",onClick:a=>s.$emit("open-edit-relation-modal",t.id,l)},[x("div",dv,Ae(l.fieldName),1),x("div",fv,Ae(l.targetModel),1)],8,cv))),128))])]))}}),pv=Xe(hv,[["__scopeId","data-v-b7467be7"]]),Wt=yc("modal",()=>{const e=te(!1),t=te(""),n=zo(null),o=te({});function i(r,l,a={}){n.value=an(l),o.value=a,t.value=r,e.value=!0}function s(){e.value=!1,n.value=null,o.value={},t.value=""}return{isOpen:e,modalTitle:t,currentComponent:n,props:o,open:i,close:s}}),gv=kg(),Kt=e=>{gv.error(e,{toastClassName:"container-class"})},vv={class:"field-modal-container"},mv={class:"input-container"},yv={class:"input-group"},_v={class:"input-group"},bv=["disabled"],wv={key:0,class:"input-group"},xv=["value"],Ev={class:"input-group"},Sv=["disabled"],Cv=["value"],Nv=["disabled"],Tv={class:"checkbox-group"},Mv={key:0,class:"checkbox-group"},$v=he({__name:"AddFieldModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(),s=te(""),r=te(""),l=te(""),a=te(!1),u=te(!1),c=te(!1),d=te(!1),p=te(null),h=te({}),b=te(!1),E=te(!1);xe(a,P=>{P&&(r.value="UUID",l.value="uuid.uuid4")});const N=()=>{l.value==="datetime.now(timezone.utc)"&&(l.value=""),h.value={}};xe(b,P=>{P?(E.value=!1,l.value="datetime.now(timezone.utc)",h.value={}):E.value||N()}),xe(E,P=>{P?(b.value=!1,l.value="datetime.now(timezone.utc)",h.value={onupdate:"datetime.now(timezone.utc)"}):b.value||N()}),xe(r,P=>{P!=="DateTime"&&(b.value||E.value)&&(N(),b.value=!1,E.value=!1)});const M=()=>{if(!(!s.value||!r.value)){if(!vs(s.value)){Kt(Yt.fieldName);return}n.addField(t.id,{name:s.value,type:r.value,typeEnum:i.value?.name,isPrimaryKey:a.value,isNullable:u.value,isUnique:c.value,isIndex:d.value,defaultValue:l.value||void 0,metadata:p.value||void 0}),o.close()}};return(P,g)=>(z(),W("main",vv,[x("div",mv,[x("div",yv,[g[11]||(g[11]=x("label",{class:"field-label"},"Field name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":g[0]||(g[0]=_=>s.value=_),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",_v,[g[13]||(g[13]=x("label",{class:"field-label"},"Type",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[1]||(g[1]=_=>r.value=_),disabled:a.value},g[12]||(g[12]=[Wr('-- Select type --StringIntUUIDDateTimeBooleanFloatEnum',8)]),8,bv),[[Ft,r.value]])]),r.value==="Enum"?(z(),W("div",wv,[g[15]||(g[15]=x("label",{class:"field-label"},"Select Enum",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[2]||(g[2]=_=>i.value=_)},[g[14]||(g[14]=x("option",{disabled:"",value:""},"-- Select Enum --",-1)),(z(!0),W(_e,null,Ye(oe(n).enums,_=>(z(),W("option",{key:_.name,value:_},Ae(_.name),9,xv))),128))],512),[[Ft,i.value]])])):Ne("",!0),x("div",Ev,[g[17]||(g[17]=x("label",{class:"field-label"},"Default value",-1)),r.value==="Enum"?ye((z(),W("select",{key:0,class:"field-select","onUpdate:modelValue":g[3]||(g[3]=_=>l.value=_),disabled:a.value},[g[16]||(g[16]=x("option",{value:""},null,-1)),(z(!0),W(_e,null,Ye(i.value?.values,_=>(z(),W("option",{key:_.name,value:_.name},Ae(_.name),9,Cv))),128))],8,Sv)),[[Ft,l.value]]):ye((z(),W("input",{key:1,class:"field-input","onUpdate:modelValue":g[4]||(g[4]=_=>l.value=_),type:"text",maxlength:"100",disabled:a.value||b.value||E.value},null,8,Nv)),[[tt,l.value]])])]),x("div",Tv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[5]||(g[5]=_=>a.value=_)},null,512),[[Ke,a.value]]),g[18]||(g[18]=Be(" Primary key",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[6]||(g[6]=_=>u.value=_)},null,512),[[Ke,u.value]]),g[19]||(g[19]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[7]||(g[7]=_=>c.value=_)},null,512),[[Ke,c.value]]),g[20]||(g[20]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[8]||(g[8]=_=>d.value=_)},null,512),[[Ke,d.value]]),g[21]||(g[21]=Be(" Index",-1))])]),r.value==="DateTime"?(z(),W("div",Mv,[g[24]||(g[24]=x("label",{class:"field-label"},"Timestamp",-1)),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[9]||(g[9]=_=>b.value=_)},null,512),[[Ke,b.value]]),g[22]||(g[22]=Be(" Created",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[10]||(g[10]=_=>E.value=_)},null,512),[[Ke,E.value]]),g[23]||(g[23]=Be(" Updated",-1))])])):Ne("",!0),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:M},"Save")])]))}}),Iv=Xe($v,[["__scopeId","data-v-957caa91"]]),kv={class:"field-modal-container"},Pv={class:"input-container"},Av={class:"input-group"},Dv={class:"input-group"},Ov=["disabled"],Rv={key:0,class:"input-group"},Vv=["value"],Bv={class:"input-group"},Lv=["disabled"],Fv=["value"],zv=["disabled"],Hv={class:"checkbox-group"},Uv={key:0,class:"checkbox-group"},Gv=he({__name:"EditFieldModal",props:{id:{},field:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(),s=te(t.field.name),r=te(t.field.type),l=te(t.field.defaultValue||""),a=te(t.field.isPrimaryKey||!1),u=te(t.field.isNullable||!1),c=te(t.field.isUnique||!1),d=te(t.field.isIndex||!1),p=te(t.field.extraKwargs||{}),h=te(t.field.metadata?.isCreatedAtTimestamp||!1),b=te(t.field.metadata?.isUpdatedAtTimestamp||!1);ut(()=>{t.field.type==="Enum"&&t.field.typeEnum&&(i.value=n.findEnumByName(t.field.typeEnum)),t.field.type==="DateTime"&&console.log(h.value)}),xe(a,P=>{P&&(r.value="UUID",l.value="uuid.uuid4")});const E=()=>{l.value="",p.value={}};xe(h,P=>{P?(b.value=!1,l.value="datetime.now(timezone.utc)",p.value={}):b.value||E()}),xe(b,P=>{P?(h.value=!1,l.value="datetime.now(timezone.utc)",p.value={onupdate:"datetime.now(timezone.utc)"}):h.value||E()}),xe(r,P=>{console.log(r.value,P),P!=="DateTime"&&(h.value||b.value)&&(E(),h.value=!1,b.value=!1)});const N=()=>{if(!vs(s.value)){Kt(Yt.fieldName);return}n.updateField(t.id,t.field.name,{name:s.value,type:r.value,typeEnum:i.value?.name,defaultValue:l.value||void 0,isPrimaryKey:a.value,isNullable:u.value,isUnique:c.value,isIndex:d.value,metadata:{isCreatedAtTimestamp:h.value,isUpdatedAtTimestamp:b.value},extraKwargs:Object.keys(p.value).length?p.value:void 0}),o.close()},M=()=>{n.deleteField(t.id,t.field.name),o.close()};return(P,g)=>(z(),W("main",kv,[x("div",Pv,[x("div",Av,[g[11]||(g[11]=x("label",{class:"field-label"},"Field name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":g[0]||(g[0]=_=>s.value=_),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",Dv,[g[13]||(g[13]=x("label",{class:"field-label"},"Type",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[1]||(g[1]=_=>r.value=_),disabled:a.value},g[12]||(g[12]=[Wr('-- Select type --StringIntUUIDDateTimeBooleanFloatEnum',8)]),8,Ov),[[Ft,r.value]])]),r.value==="Enum"?(z(),W("div",Rv,[g[15]||(g[15]=x("label",{class:"field-label"},"Select Enum",-1)),ye(x("select",{class:"field-select","onUpdate:modelValue":g[2]||(g[2]=_=>i.value=_)},[g[14]||(g[14]=x("option",{disabled:"",value:""},"-- Select Enum --",-1)),(z(!0),W(_e,null,Ye(oe(n).enums,_=>(z(),W("option",{key:_.name,value:_},Ae(_.name),9,Vv))),128))],512),[[Ft,i.value]])])):Ne("",!0),x("div",Bv,[g[17]||(g[17]=x("label",{class:"field-label"},"Default value",-1)),r.value==="Enum"?ye((z(),W("select",{key:0,class:"field-select","onUpdate:modelValue":g[3]||(g[3]=_=>l.value=_),disabled:a.value},[g[16]||(g[16]=x("option",{value:""},null,-1)),(z(!0),W(_e,null,Ye(i.value?.values,_=>(z(),W("option",{key:_.name,value:_.name},Ae(_.name),9,Fv))),128))],8,Lv)),[[Ft,l.value]]):ye((z(),W("input",{key:1,class:"field-input","onUpdate:modelValue":g[4]||(g[4]=_=>l.value=_),type:"text",maxlength:"100",disabled:a.value||h.value||b.value},null,8,zv)),[[tt,l.value]])])]),x("div",Hv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[5]||(g[5]=_=>a.value=_)},null,512),[[Ke,a.value]]),g[18]||(g[18]=Be(" Primary key",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[6]||(g[6]=_=>u.value=_)},null,512),[[Ke,u.value]]),g[19]||(g[19]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[7]||(g[7]=_=>c.value=_)},null,512),[[Ke,c.value]]),g[20]||(g[20]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[8]||(g[8]=_=>d.value=_)},null,512),[[Ke,d.value]]),g[21]||(g[21]=Be(" Index",-1))])]),r.value==="DateTime"?(z(),W("div",Uv,[g[24]||(g[24]=x("label",{class:"field-label"},"Timestamp",-1)),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[9]||(g[9]=_=>h.value=_)},null,512),[[Ke,h.value]]),g[22]||(g[22]=Be(" Created",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":g[10]||(g[10]=_=>b.value=_)},null,512),[[Ke,b.value]]),g[23]||(g[23]=Be(" Updated",-1))])])):Ne("",!0),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:N},"Save"),x("button",{class:"delete-field-btn",onClick:M},"Delete")])]))}}),jv=Xe(Gv,[["__scopeId","data-v-d1c2c65c"]]),Yv={class:"relation-container"},Kv={class:"input-container"},Xv={class:"input-group"},Wv={class:"input-group"},Zv=["value"],qv={class:"input-group"},Jv={class:"input-group"},Qv={class:"checkbox-group"},em=he({__name:"EditRelationModal",props:{id:{},relation:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te(""),r=te(""),l=te(""),a=te(""),u=te(!1),c=te(!1),d=te(!1);ut(()=>{i.value=t.relation.fieldName||"",s.value=t.relation.fieldName||"",r.value=t.relation.targetModel||"",l.value=t.relation.onDelete||"",a.value=t.relation.backPopulates||"",u.value=t.relation.isNullable||!1,c.value=t.relation.isUnique||!1,d.value=t.relation.isIndex||!1});const p=pe(()=>n.nodes.filter(E=>E.id!==t.id)),h=()=>{if(!(!r.value||!s.value)){if(!vs(s.value)){Kt(Yt.fieldName);return}n.updateRelation(t.id,t.relation.targetModel,t.relation.fieldName,{fieldName:s.value,targetModel:r.value,backPopulates:a.value,onDelete:l.value,isNullable:u.value,isUnique:c.value,isIndex:d.value}),o.close()}},b=()=>{n.deleteRelation(t.id,t.relation.targetModel,t.relation.fieldName),o.close()};return(E,N)=>(z(),W("main",Yv,[x("div",Kv,[x("div",Xv,[N[7]||(N[7]=x("label",{class:"relation-label"},"Field name",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":N[0]||(N[0]=M=>s.value=M),type:"text",maxlength:"100"},null,512),[[tt,s.value]])]),x("div",Wv,[N[9]||(N[9]=x("label",{class:"relation-label"},"Target model",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":N[1]||(N[1]=M=>r.value=M)},[N[8]||(N[8]=x("option",{disabled:"",value:""},"-- Select a model --",-1)),(z(!0),W(_e,null,Ye(p.value,M=>(z(),W("option",{key:M.id,value:M.id},Ae(M.id),9,Zv))),128))],512),[[Ft,r.value]])]),x("div",qv,[N[11]||(N[11]=x("label",{class:"relation-label"},"OnDelete",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":N[2]||(N[2]=M=>l.value=M)},N[10]||(N[10]=[x("option",{disabled:"",value:""},"-- Select behavior --",-1),x("option",{value:"CASCADE"},"CASCADE",-1),x("option",{value:"SET_NULL"},"SET_NULL",-1)]),512),[[Ft,l.value]])]),x("div",Jv,[N[12]||(N[12]=x("label",{class:"relation-label"},"Back populates",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":N[3]||(N[3]=M=>a.value=M),type:"text"},null,512),[[tt,a.value]])])]),x("div",Qv,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[4]||(N[4]=M=>u.value=M)},null,512),[[Ke,u.value]]),N[13]||(N[13]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[5]||(N[5]=M=>c.value=M)},null,512),[[Ke,c.value]]),N[14]||(N[14]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":N[6]||(N[6]=M=>d.value=M)},null,512),[[Ke,d.value]]),N[15]||(N[15]=Be(" Index",-1))])]),x("div",{class:"action-group"},[x("button",{class:"delete-relation-btn",onClick:b},"Delete"),x("button",{class:"save-relation-btn",onClick:h},"Save")])]))}}),tm=Xe(em,[["__scopeId","data-v-de485ddf"]]),nm={class:"relation-container"},om={class:"input-container"},im={class:"input-group"},sm={class:"input-group"},rm=["value"],lm={class:"input-group"},am={class:"input-group"},um={class:"checkbox-group"},cm=he({__name:"AddRelationModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te(""),r=te(""),l=te(""),a=te(!1),u=te(!1),c=te(!1),d=pe(()=>n.nodes.filter(h=>h.id!==t.id)),p=()=>{if(!(!s.value||!i.value)){if(!vs(i.value)){Kt(Yt.fieldName);return}n.addRelation(t.id,s.value,{fieldName:i.value,targetModel:s.value,backPopulates:l.value,onDelete:r.value,isNullable:a.value,isUnique:u.value,isIndex:c.value}),o.close()}};return(h,b)=>(z(),W("main",nm,[x("div",om,[x("div",im,[b[7]||(b[7]=x("label",{class:"relation-label"},"Field name",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":b[0]||(b[0]=E=>i.value=E),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",sm,[b[9]||(b[9]=x("label",{class:"relation-label"},"Target model",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":b[1]||(b[1]=E=>s.value=E)},[b[8]||(b[8]=x("option",{disabled:"",value:""},"-- Select a model --",-1)),(z(!0),W(_e,null,Ye(d.value,E=>(z(),W("option",{key:E.id,value:E.id},Ae(E.id),9,rm))),128))],512),[[Ft,s.value]])]),x("div",lm,[b[11]||(b[11]=x("label",{class:"relation-label"},"OnDelete",-1)),ye(x("select",{class:"relation-select","onUpdate:modelValue":b[2]||(b[2]=E=>r.value=E)},b[10]||(b[10]=[x("option",{disabled:"",value:""},"-- Select behavior --",-1),x("option",{value:"CASCADE"},"CASCADE",-1),x("option",{value:"SET_NULL"},"SET_NULL",-1)]),512),[[Ft,r.value]])]),x("div",am,[b[12]||(b[12]=x("label",{class:"relation-label"},"Back populates",-1)),ye(x("input",{class:"relation-input","onUpdate:modelValue":b[3]||(b[3]=E=>l.value=E),type:"text",maxlength:"100"},null,512),[[tt,l.value]])])]),x("div",um,[x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[4]||(b[4]=E=>a.value=E)},null,512),[[Ke,a.value]]),b[13]||(b[13]=Be(" Nullable",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[5]||(b[5]=E=>u.value=E)},null,512),[[Ke,u.value]]),b[14]||(b[14]=Be(" Unique",-1))]),x("label",null,[ye(x("input",{type:"checkbox","onUpdate:modelValue":b[6]||(b[6]=E=>c.value=E)},null,512),[[Ke,c.value]]),b[15]||(b[15]=Be(" Index",-1))])]),x("div",{class:"action-group"},[x("button",{class:"save-relation-btn",onClick:p},"Save")])]))}}),dm=Xe(cm,[["__scopeId","data-v-074cc5ca"]]),fm={class:"rename-node-modal"},hm={class:"input-container"},pm={class:"input-group"},gm=he({__name:"RenameNodeModal",props:{id:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(t.id),s=()=>{const r=i.value.trim();if(!Lc(r)){Kt(Yt.modelName);return}if(!r||i.value===t.id){o.close();return}n.renameNode(t.id,r),o.close()};return(r,l)=>(z(),W("main",fm,[x("div",hm,[x("div",pm,[l[1]||(l[1]=x("label",{class:"field-label"},"New model name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":l[0]||(l[0]=a=>i.value=a),type:"text",maxlength:"100"},null,512),[[tt,i.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-btn",onClick:s},"Rename")])]))}}),vm=Xe(gm,[["__scopeId","data-v-7350b5ff"]]);function ms(e){return is()?(To(e),!0):!1}function nn(e){return typeof e=="function"?e():oe(e)}const mm=typeof window<"u"&&typeof document<"u",ym=e=>typeof e<"u",_m=Object.prototype.toString,bm=e=>_m.call(e)==="[object Object]",wm=()=>{};function xm(e,t){function n(...o){return new Promise((i,s)=>{Promise.resolve(e(()=>t.apply(this,o),{fn:t,thisArg:this,args:o})).then(i).catch(s)})}return n}const zc=e=>e();function Em(e=zc){const t=te(!0);function n(){t.value=!1}function o(){t.value=!0}const i=(...s)=>{t.value&&e(...s)};return{isActive:zr(t),pause:n,resume:o,eventFilter:i}}function ua(e,t=!1,n="Timeout"){return new Promise((o,i)=>{setTimeout(t?()=>i(n):o,e)})}function Sm(e,t,n={}){const{eventFilter:o=zc,...i}=n;return xe(e,xm(o,t),i)}function Zn(e,t,n={}){const{eventFilter:o,...i}=n,{eventFilter:s,pause:r,resume:l,isActive:a}=Em(o);return{stop:Sm(e,t,{...i,eventFilter:s}),pause:r,resume:l,isActive:a}}function Cm(e,t={}){if(!Oe(e))return _u(e);const n=Array.isArray(e.value)?Array.from({length:e.value.length}):{};for(const o in e.value)n[o]=If(()=>({get(){return e.value[o]},set(i){var s;if((s=nn(t.replaceRef))!=null?s:!0)if(Array.isArray(e.value)){const l=[...e.value];l[o]=i,e.value=l}else{const l={...e.value,[o]:i};Object.setPrototypeOf(l,Object.getPrototypeOf(e.value)),e.value=l}else e.value[o]=i}}));return n}function vr(e,t=!1){function n(d,{flush:p="sync",deep:h=!1,timeout:b,throwOnTimeout:E}={}){let N=null;const P=[new Promise(g=>{N=xe(e,_=>{d(_)!==t&&(N?.(),g(_))},{flush:p,deep:h,immediate:!0})})];return b!=null&&P.push(ua(b,E).then(()=>nn(e)).finally(()=>N?.())),Promise.race(P)}function o(d,p){if(!Oe(d))return n(_=>_===d,p);const{flush:h="sync",deep:b=!1,timeout:E,throwOnTimeout:N}=p??{};let M=null;const g=[new Promise(_=>{M=xe([e,d],([O,U])=>{t!==(O===U)&&(M?.(),_(O))},{flush:h,deep:b,immediate:!0})})];return E!=null&&g.push(ua(E,N).then(()=>nn(e)).finally(()=>(M?.(),nn(e)))),Promise.race(g)}function i(d){return n(p=>!!p,d)}function s(d){return o(null,d)}function r(d){return o(void 0,d)}function l(d){return n(Number.isNaN,d)}function a(d,p){return n(h=>{const b=Array.from(h);return b.includes(d)||b.includes(nn(d))},p)}function u(d){return c(1,d)}function c(d=1,p){let h=-1;return n(()=>(h+=1,h>=d),p)}return Array.isArray(nn(e))?{toMatch:n,toContains:a,changed:u,changedTimes:c,get not(){return vr(e,!t)}}:{toMatch:n,toBe:o,toBeTruthy:i,toBeNull:s,toBeNaN:l,toBeUndefined:r,changed:u,changedTimes:c,get not(){return vr(e,!t)}}}function mr(e){return vr(e)}function Nm(e){var t;const n=nn(e);return(t=n?.$el)!=null?t:n}const Hc=mm?window:void 0;function Uc(...e){let t,n,o,i;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,o,i]=e,t=Hc):[t,n,o,i]=e,!t)return wm;Array.isArray(n)||(n=[n]),Array.isArray(o)||(o=[o]);const s=[],r=()=>{s.forEach(c=>c()),s.length=0},l=(c,d,p,h)=>(c.addEventListener(d,p,h),()=>c.removeEventListener(d,p,h)),a=xe(()=>[Nm(t),nn(i)],([c,d])=>{if(r(),!c)return;const p=bm(d)?{...d}:d;s.push(...n.flatMap(h=>o.map(b=>l(c,h,b,p))))},{immediate:!0,flush:"post"}),u=()=>{a(),r()};return ms(u),u}function Tm(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function ca(...e){let t,n,o={};e.length===3?(t=e[0],n=e[1],o=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],o=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:i=Hc,eventName:s="keydown",passive:r=!1,dedupe:l=!1}=o,a=Tm(t);return Uc(i,s,c=>{c.repeat&&nn(l)||a(c)&&n(c)},r)}function Mm(e){return JSON.parse(JSON.stringify(e))}function zs(e,t,n,o={}){var i,s,r;const{clone:l=!1,passive:a=!1,eventName:u,deep:c=!1,defaultValue:d,shouldEmit:p}=o,h=Xt(),b=n||h?.emit||((i=h?.$emit)==null?void 0:i.bind(h))||((r=(s=h?.proxy)==null?void 0:s.$emit)==null?void 0:r.bind(h?.proxy));let E=u;t||(t="modelValue"),E=E||`update:${t.toString()}`;const N=g=>l?typeof l=="function"?l(g):Mm(g):g,M=()=>ym(e[t])?N(e[t]):d,P=g=>{p?p(g)&&b(E,g):b(E,g)};if(a){const g=M(),_=te(g);let O=!1;return xe(()=>e[t],U=>{O||(O=!0,_.value=N(U),ht(()=>O=!1))}),xe(_,U=>{!O&&(U!==e[t]||c)&&P(U)},{deep:c}),_}else return pe({get(){return M()},set(g){P(g)}})}var $m={value:()=>{}};function ys(){for(var e=0,t=arguments.length,n={},o;e=0&&(o=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:o}})}Mi.prototype=ys.prototype={constructor:Mi,on:function(e,t){var n=this._,o=Im(e+"",n),i,s=-1,r=o.length;if(arguments.length<2){for(;++s0)for(var n=new Array(i),o=0,i,s;o=0&&(t=e.slice(0,n))!=="xmlns"&&(e=e.slice(n+1)),fa.hasOwnProperty(t)?{space:fa[t],local:e}:e}function Pm(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===yr&&t.documentElement.namespaceURI===yr?t.createElement(e):t.createElementNS(n,e)}}function Am(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Gc(e){var t=_s(e);return(t.local?Am:Pm)(t)}function Dm(){}function Jr(e){return e==null?Dm:function(){return this.querySelector(e)}}function Om(e){typeof e!="function"&&(e=Jr(e));for(var t=this._groups,n=t.length,o=new Array(n),i=0;i=g&&(g=P+1);!(O=N[g])&&++g=0;)(r=o[i])&&(s&&r.compareDocumentPosition(s)^4&&s.parentNode.insertBefore(r,s),s=r);return this}function r1(e){e||(e=l1);function t(d,p){return d&&p?e(d.__data__,p.__data__):!d-!p}for(var n=this._groups,o=n.length,i=new Array(o),s=0;st?1:e>=t?0:NaN}function a1(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function u1(){return Array.from(this)}function c1(){for(var e=this._groups,t=0,n=e.length;t1?this.each((t==null?w1:typeof t=="function"?E1:x1)(e,t,n??"")):uo(this.node(),e)}function uo(e,t){return e.style.getPropertyValue(t)||Wc(e).getComputedStyle(e,null).getPropertyValue(t)}function C1(e){return function(){delete this[e]}}function N1(e,t){return function(){this[e]=t}}function T1(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function M1(e,t){return arguments.length>1?this.each((t==null?C1:typeof t=="function"?T1:N1)(e,t)):this.node()[e]}function Zc(e){return e.trim().split(/^|\s+/)}function Qr(e){return e.classList||new qc(e)}function qc(e){this._node=e,this._names=Zc(e.getAttribute("class")||"")}qc.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function Jc(e,t){for(var n=Qr(e),o=-1,i=t.length;++o=0&&(n=t.slice(o+1),t=t.slice(0,o)),{type:t,name:n}})}function n0(e){return function(){var t=this.__on;if(t){for(var n=0,o=-1,i=t.length,s;n()=>e;function _r(e,{sourceEvent:t,subject:n,target:o,identifier:i,active:s,x:r,y:l,dx:a,dy:u,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:o,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:s,enumerable:!0,configurable:!0},x:{value:r,enumerable:!0,configurable:!0},y:{value:l,enumerable:!0,configurable:!0},dx:{value:a,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:c}})}_r.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function f0(e){return!e.ctrlKey&&!e.button}function h0(){return this.parentNode}function p0(e,t){return t??{x:e.x,y:e.y}}function g0(){return navigator.maxTouchPoints||"ontouchstart"in this}function v0(){var e=f0,t=h0,n=p0,o=g0,i={},s=ys("start","drag","end"),r=0,l,a,u,c,d=0;function p(_){_.on("mousedown.drag",h).filter(o).on("touchstart.drag",N).on("touchmove.drag",M,d0).on("touchend.drag touchcancel.drag",P).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(_,O){if(!(c||!e.call(this,_,O))){var U=g(this,t.call(this,_,O),_,O,"mouse");U&&(wt(_.view).on("mousemove.drag",b,Wo).on("mouseup.drag",E,Wo),nd(_.view),Hs(_),u=!1,l=_.clientX,a=_.clientY,U("start",_))}}function b(_){if(oo(_),!u){var O=_.clientX-l,U=_.clientY-a;u=O*O+U*U>d}i.mouse("drag",_)}function E(_){wt(_.view).on("mousemove.drag mouseup.drag",null),od(_.view,u),oo(_),i.mouse("end",_)}function N(_,O){if(e.call(this,_,O)){var U=_.changedTouches,X=t.call(this,_,O),H=U.length,F,Z;for(F=0;F>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?pi(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?pi(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=y0.exec(e))?new lt(t[1],t[2],t[3],1):(t=_0.exec(e))?new lt(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=b0.exec(e))?pi(t[1],t[2],t[3],t[4]):(t=w0.exec(e))?pi(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=x0.exec(e))?_a(t[1],t[2]/100,t[3]/100,1):(t=E0.exec(e))?_a(t[1],t[2]/100,t[3]/100,t[4]):ha.hasOwnProperty(e)?va(ha[e]):e==="transparent"?new lt(NaN,NaN,NaN,0):null}function va(e){return new lt(e>>16&255,e>>8&255,e&255,1)}function pi(e,t,n,o){return o<=0&&(e=t=n=NaN),new lt(e,t,n,o)}function N0(e){return e instanceof li||(e=Gn(e)),e?(e=e.rgb(),new lt(e.r,e.g,e.b,e.opacity)):new lt}function br(e,t,n,o){return arguments.length===1?N0(e):new lt(e,t,n,o??1)}function lt(e,t,n,o){this.r=+e,this.g=+t,this.b=+n,this.opacity=+o}el(lt,br,id(li,{brighter(e){return e=e==null?Ui:Math.pow(Ui,e),new lt(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Zo:Math.pow(Zo,e),new lt(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new lt(Fn(this.r),Fn(this.g),Fn(this.b),Gi(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:ma,formatHex:ma,formatHex8:T0,formatRgb:ya,toString:ya}));function ma(){return`#${Rn(this.r)}${Rn(this.g)}${Rn(this.b)}`}function T0(){return`#${Rn(this.r)}${Rn(this.g)}${Rn(this.b)}${Rn((isNaN(this.opacity)?1:this.opacity)*255)}`}function ya(){const e=Gi(this.opacity);return`${e===1?"rgb(":"rgba("}${Fn(this.r)}, ${Fn(this.g)}, ${Fn(this.b)}${e===1?")":`, ${e})`}`}function Gi(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Fn(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Rn(e){return e=Fn(e),(e<16?"0":"")+e.toString(16)}function _a(e,t,n,o){return o<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new xt(e,t,n,o)}function sd(e){if(e instanceof xt)return new xt(e.h,e.s,e.l,e.opacity);if(e instanceof li||(e=Gn(e)),!e)return new xt;if(e instanceof xt)return e;e=e.rgb();var t=e.r/255,n=e.g/255,o=e.b/255,i=Math.min(t,n,o),s=Math.max(t,n,o),r=NaN,l=s-i,a=(s+i)/2;return l?(t===s?r=(n-o)/l+(n0&&a<1?0:r,new xt(r,l,a,e.opacity)}function M0(e,t,n,o){return arguments.length===1?sd(e):new xt(e,t,n,o??1)}function xt(e,t,n,o){this.h=+e,this.s=+t,this.l=+n,this.opacity=+o}el(xt,M0,id(li,{brighter(e){return e=e==null?Ui:Math.pow(Ui,e),new xt(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Zo:Math.pow(Zo,e),new xt(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,o=n+(n<.5?n:1-n)*t,i=2*n-o;return new lt(Us(e>=240?e-240:e+120,i,o),Us(e,i,o),Us(e<120?e+240:e-120,i,o),this.opacity)},clamp(){return new xt(ba(this.h),gi(this.s),gi(this.l),Gi(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Gi(this.opacity);return`${e===1?"hsl(":"hsla("}${ba(this.h)}, ${gi(this.s)*100}%, ${gi(this.l)*100}%${e===1?")":`, ${e})`}`}}));function ba(e){return e=(e||0)%360,e<0?e+360:e}function gi(e){return Math.max(0,Math.min(1,e||0))}function Us(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const tl=e=>()=>e;function $0(e,t){return function(n){return e+n*t}}function I0(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(o){return Math.pow(e+o*t,n)}}function k0(e){return(e=+e)==1?rd:function(t,n){return n-t?I0(t,n,e):tl(isNaN(t)?n:t)}}function rd(e,t){var n=t-e;return n?$0(e,n):tl(isNaN(e)?t:e)}const ji=function e(t){var n=k0(t);function o(i,s){var r=n((i=br(i)).r,(s=br(s)).r),l=n(i.g,s.g),a=n(i.b,s.b),u=rd(i.opacity,s.opacity);return function(c){return i.r=r(c),i.g=l(c),i.b=a(c),i.opacity=u(c),i+""}}return o.gamma=e,o}(1);function P0(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,o=t.slice(),i;return function(s){for(i=0;in&&(s=t.slice(n,s),l[r]?l[r]+=s:l[++r]=s),(o=o[0])===(i=i[0])?l[r]?l[r]+=i:l[++r]=i:(l[++r]=null,a.push({i:r,x:Vt(o,i)})),n=Gs.lastIndex;return n180?c+=360:c-u>180&&(u+=360),p.push({i:d.push(i(d)+"rotate(",null,o)-2,x:Vt(u,c)})):c&&d.push(i(d)+"rotate("+c+o)}function l(u,c,d,p){u!==c?p.push({i:d.push(i(d)+"skewX(",null,o)-2,x:Vt(u,c)}):c&&d.push(i(d)+"skewX("+c+o)}function a(u,c,d,p,h,b){if(u!==d||c!==p){var E=h.push(i(h)+"scale(",null,",",null,")");b.push({i:E-4,x:Vt(u,d)},{i:E-2,x:Vt(c,p)})}else(d!==1||p!==1)&&h.push(i(h)+"scale("+d+","+p+")")}return function(u,c){var d=[],p=[];return u=e(u),c=e(c),s(u.translateX,u.translateY,c.translateX,c.translateY,d,p),r(u.rotate,c.rotate,d,p),l(u.skewX,c.skewX,d,p),a(u.scaleX,u.scaleY,c.scaleX,c.scaleY,d,p),u=c=null,function(h){for(var b=-1,E=p.length,N;++b=0&&e._call.call(void 0,t),e=e._next;--co}function Ea(){jn=(Ki=Jo.now())+bs,co=Eo=0;try{K0()}finally{co=0,W0(),jn=0}}function X0(){var e=Jo.now(),t=e-Ki;t>cd&&(bs-=t,Ki=e)}function W0(){for(var e,t=Yi,n,o=1/0;t;)t._call?(o>t._time&&(o=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Yi=n);So=e,Er(o)}function Er(e){if(!co){Eo&&(Eo=clearTimeout(Eo));var t=e-jn;t>24?(e<1/0&&(Eo=setTimeout(Ea,e-Jo.now()-bs)),bo&&(bo=clearInterval(bo))):(bo||(Ki=Jo.now(),bo=setInterval(X0,cd)),co=1,dd(Ea))}}function Sa(e,t,n){var o=new Xi;return t=t==null?0:+t,o.restart(i=>{o.stop(),e(i+t)},t,n),o}var Z0=ys("start","end","cancel","interrupt"),q0=[],hd=0,Ca=1,Sr=2,Ii=3,Na=4,Cr=5,ki=6;function ws(e,t,n,o,i,s){var r=e.__transition;if(!r)e.__transition={};else if(n in r)return;J0(e,n,{name:t,index:o,group:i,on:Z0,tween:q0,time:s.time,delay:s.delay,duration:s.duration,ease:s.ease,timer:null,state:hd})}function ol(e,t){var n=Mt(e,t);if(n.state>hd)throw new Error("too late; already scheduled");return n}function Zt(e,t){var n=Mt(e,t);if(n.state>Ii)throw new Error("too late; already running");return n}function Mt(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function J0(e,t,n){var o=e.__transition,i;o[t]=n,n.timer=fd(s,0,n.time);function s(u){n.state=Ca,n.timer.restart(r,n.delay,n.time),n.delay<=u&&r(u-n.delay)}function r(u){var c,d,p,h;if(n.state!==Ca)return a();for(c in o)if(h=o[c],h.name===n.name){if(h.state===Ii)return Sa(r);h.state===Na?(h.state=ki,h.timer.stop(),h.on.call("interrupt",e,e.__data__,h.index,h.group),delete o[c]):+cSr&&o.state=0&&(t=t.slice(0,n)),!t||t==="start"})}function My(e,t,n){var o,i,s=Ty(t)?ol:Zt;return function(){var r=s(this,e),l=r.on;l!==o&&(i=(o=l).copy()).on(t,n),r.on=i}}function $y(e,t){var n=this._id;return arguments.length<2?Mt(this.node(),n).on.on(e):this.each(My(n,e,t))}function Iy(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function ky(){return this.on("end.remove",Iy(this._id))}function Py(e){var t=this._name,n=this._id;typeof e!="function"&&(e=Jr(e));for(var o=this._groups,i=o.length,s=new Array(i),r=0;r()=>e;function o2(e,{sourceEvent:t,target:n,transform:o,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:o,enumerable:!0,configurable:!0},_:{value:i}})}function on(e,t,n){this.k=e,this.x=t,this.y=n}on.prototype={constructor:on,scale:function(e){return e===1?this:new on(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new on(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var fo=new on(1,0,0);on.prototype;function js(e){e.stopImmediatePropagation()}function wo(e){e.preventDefault(),e.stopImmediatePropagation()}function i2(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function s2(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Ta(){return this.__zoom||fo}function r2(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function l2(){return navigator.maxTouchPoints||"ontouchstart"in this}function a2(e,t,n){var o=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],s=e.invertY(t[0][1])-n[0][1],r=e.invertY(t[1][1])-n[1][1];return e.translate(i>o?(o+i)/2:Math.min(0,o)||Math.max(0,i),r>s?(s+r)/2:Math.min(0,s)||Math.max(0,r))}function u2(){var e=i2,t=s2,n=a2,o=r2,i=l2,s=[0,1/0],r=[[-1/0,-1/0],[1/0,1/0]],l=250,a=$i,u=ys("start","zoom","end"),c,d,p,h=500,b=150,E=0,N=10;function M(T){T.property("__zoom",Ta).on("wheel.zoom",H,{passive:!1}).on("mousedown.zoom",F).on("dblclick.zoom",Z).filter(i).on("touchstart.zoom",j).on("touchmove.zoom",C).on("touchend.zoom touchcancel.zoom",ee).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}M.transform=function(T,G,k,L){var $=T.selection?T.selection():T;$.property("__zoom",Ta),T!==$?O(T,G,k,L):$.interrupt().each(function(){U(this,arguments).event(L).start().zoom(null,typeof G=="function"?G.apply(this,arguments):G).end()})},M.scaleBy=function(T,G,k,L){M.scaleTo(T,function(){var $=this.__zoom.k,D=typeof G=="function"?G.apply(this,arguments):G;return $*D},k,L)},M.scaleTo=function(T,G,k,L){M.transform(T,function(){var $=t.apply(this,arguments),D=this.__zoom,V=k==null?_($):typeof k=="function"?k.apply(this,arguments):k,Y=D.invert(V),J=typeof G=="function"?G.apply(this,arguments):G;return n(g(P(D,J),V,Y),$,r)},k,L)},M.translateBy=function(T,G,k,L){M.transform(T,function(){return n(this.__zoom.translate(typeof G=="function"?G.apply(this,arguments):G,typeof k=="function"?k.apply(this,arguments):k),t.apply(this,arguments),r)},null,L)},M.translateTo=function(T,G,k,L,$){M.transform(T,function(){var D=t.apply(this,arguments),V=this.__zoom,Y=L==null?_(D):typeof L=="function"?L.apply(this,arguments):L;return n(fo.translate(Y[0],Y[1]).scale(V.k).translate(typeof G=="function"?-G.apply(this,arguments):-G,typeof k=="function"?-k.apply(this,arguments):-k),D,r)},L,$)};function P(T,G){return G=Math.max(s[0],Math.min(s[1],G)),G===T.k?T:new on(G,T.x,T.y)}function g(T,G,k){var L=G[0]-k[0]*T.k,$=G[1]-k[1]*T.k;return L===T.x&&$===T.y?T:new on(T.k,L,$)}function _(T){return[(+T[0][0]+ +T[1][0])/2,(+T[0][1]+ +T[1][1])/2]}function O(T,G,k,L){T.on("start.zoom",function(){U(this,arguments).event(L).start()}).on("interrupt.zoom end.zoom",function(){U(this,arguments).event(L).end()}).tween("zoom",function(){var $=this,D=arguments,V=U($,D).event(L),Y=t.apply($,D),J=k==null?_(Y):typeof k=="function"?k.apply($,D):k,ue=Math.max(Y[1][0]-Y[0][0],Y[1][1]-Y[0][1]),Q=$.__zoom,ie=typeof G=="function"?G.apply($,D):G,le=a(Q.invert(J).concat(ue/Q.k),ie.invert(J).concat(ue/ie.k));return function(me){if(me===1)me=ie;else{var be=le(me),fe=ue/be[2];me=new on(fe,J[0]-be[0]*fe,J[1]-be[1]*fe)}V.zoom(null,me)}})}function U(T,G,k){return!k&&T.__zooming||new X(T,G)}function X(T,G){this.that=T,this.args=G,this.active=0,this.sourceEvent=null,this.extent=t.apply(T,G),this.taps=0}X.prototype={event:function(T){return T&&(this.sourceEvent=T),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(T,G){return this.mouse&&T!=="mouse"&&(this.mouse[1]=G.invert(this.mouse[0])),this.touch0&&T!=="touch"&&(this.touch0[1]=G.invert(this.touch0[0])),this.touch1&&T!=="touch"&&(this.touch1[1]=G.invert(this.touch1[0])),this.that.__zoom=G,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(T){var G=wt(this.that).datum();u.call(T,this.that,new o2(T,{sourceEvent:this.sourceEvent,target:M,transform:this.that.__zoom,dispatch:u}),G)}};function H(T,...G){if(!e.apply(this,arguments))return;var k=U(this,G).event(T),L=this.__zoom,$=Math.max(s[0],Math.min(s[1],L.k*Math.pow(2,o.apply(this,arguments)))),D=Ot(T);if(k.wheel)(k.mouse[0][0]!==D[0]||k.mouse[0][1]!==D[1])&&(k.mouse[1]=L.invert(k.mouse[0]=D)),clearTimeout(k.wheel);else{if(L.k===$)return;k.mouse=[D,L.invert(D)],Pi(this),k.start()}wo(T),k.wheel=setTimeout(V,b),k.zoom("mouse",n(g(P(L,$),k.mouse[0],k.mouse[1]),k.extent,r));function V(){k.wheel=null,k.end()}}function F(T,...G){if(p||!e.apply(this,arguments))return;var k=T.currentTarget,L=U(this,G,!0).event(T),$=wt(T.view).on("mousemove.zoom",J,!0).on("mouseup.zoom",ue,!0),D=Ot(T,k),V=T.clientX,Y=T.clientY;nd(T.view),js(T),L.mouse=[D,this.__zoom.invert(D)],Pi(this),L.start();function J(Q){if(wo(Q),!L.moved){var ie=Q.clientX-V,le=Q.clientY-Y;L.moved=ie*ie+le*le>E}L.event(Q).zoom("mouse",n(g(L.that.__zoom,L.mouse[0]=Ot(Q,k),L.mouse[1]),L.extent,r))}function ue(Q){$.on("mousemove.zoom mouseup.zoom",null),od(Q.view,L.moved),wo(Q),L.event(Q).end()}}function Z(T,...G){if(e.apply(this,arguments)){var k=this.__zoom,L=Ot(T.changedTouches?T.changedTouches[0]:T,this),$=k.invert(L),D=k.k*(T.shiftKey?.5:2),V=n(g(P(k,D),L,$),t.apply(this,G),r);wo(T),l>0?wt(this).transition().duration(l).call(O,V,L,T):wt(this).call(M.transform,V,L,T)}}function j(T,...G){if(e.apply(this,arguments)){var k=T.touches,L=k.length,$=U(this,G,T.changedTouches.length===L).event(T),D,V,Y,J;for(js(T),V=0;V(e.Left="left",e.Top="top",e.Right="right",e.Bottom="bottom",e))(ae||{}),sl=(e=>(e.Partial="partial",e.Full="full",e))(sl||{}),An=(e=>(e.Bezier="default",e.SimpleBezier="simple-bezier",e.Straight="straight",e.Step="step",e.SmoothStep="smoothstep",e))(An||{}),Cn=(e=>(e.Strict="strict",e.Loose="loose",e))(Cn||{}),Nr=(e=>(e.Arrow="arrow",e.ArrowClosed="arrowclosed",e))(Nr||{}),Vo=(e=>(e.Free="free",e.Vertical="vertical",e.Horizontal="horizontal",e))(Vo||{});const c2=["INPUT","SELECT","TEXTAREA"],d2=typeof document<"u"?document:null;function Tr(e){var t,n;const o=((n=(t=e.composedPath)==null?void 0:t.call(e))==null?void 0:n[0])||e.target,i=typeof o?.hasAttribute=="function"?o.hasAttribute("contenteditable"):!1,s=typeof o?.closest=="function"?o.closest(".nokey"):null;return c2.includes(o?.nodeName)||i||!!s}function f2(e){return e.ctrlKey||e.metaKey||e.shiftKey||e.altKey}function Ma(e,t,n,o){const i=t.replace("+",` +`).replace(` + +`,` ++`).split(` +`).map(r=>r.trim().toLowerCase());if(i.length===1)return e.toLowerCase()===t.toLowerCase();o||n.add(e.toLowerCase());const s=i.every((r,l)=>n.has(r)&&Array.from(n.values())[l]===i[l]);return o&&n.delete(e.toLowerCase()),s}function h2(e,t){return n=>{if(!n.code&&!n.key)return!1;const o=p2(n.code,e);return Array.isArray(e)?e.some(i=>Ma(n[o],i,t,n.type==="keyup")):Ma(n[o],e,t,n.type==="keyup")}}function p2(e,t){return t.includes(e)?"code":"key"}function Bo(e,t){const n=pe(()=>Ee(t?.target)??d2),o=zo(Ee(e)===!0);let i=!1;const s=new Set;let r=a(Ee(e));xe(()=>Ee(e),(u,c)=>{typeof c=="boolean"&&typeof u!="boolean"&&l(),r=a(u)},{immediate:!0}),Uc(["blur","contextmenu"],l),ca((...u)=>r(...u),u=>{var c,d;const p=Ee(t?.actInsideInputWithModifier)??!0,h=Ee(t?.preventDefault)??!1;if(i=f2(u),(!i||i&&!p)&&Tr(u))return;const E=((d=(c=u.composedPath)==null?void 0:c.call(u))==null?void 0:d[0])||u.target,N=E?.nodeName==="BUTTON"||E?.nodeName==="A";!h&&(i||!N)&&u.preventDefault(),o.value=!0},{eventName:"keydown",target:n}),ca((...u)=>r(...u),u=>{const c=Ee(t?.actInsideInputWithModifier)??!0;if(o.value){if((!i||i&&!c)&&Tr(u))return;i=!1,o.value=!1}},{eventName:"keyup",target:n});function l(){i=!1,s.clear(),o.value=Ee(e)===!0}function a(u){return u===null?(l(),()=>!1):typeof u=="boolean"?(l(),o.value=u,()=>!1):Array.isArray(u)||typeof u=="string"?h2(u,s):u}return o}const md="vue-flow__node-desc",yd="vue-flow__edge-desc",g2="vue-flow__aria-live",_d=["Enter"," ","Escape"],so={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}};function Wi(e){return{...e.computedPosition||{x:0,y:0},width:e.dimensions.width||0,height:e.dimensions.height||0}}function Zi(e,t){const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),o=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return Math.ceil(n*o)}function xs(e){return{width:e.offsetWidth,height:e.offsetHeight}}function Yn(e,t=0,n=1){return Math.min(Math.max(e,t),n)}function bd(e,t){return{x:Yn(e.x,t[0][0],t[1][0]),y:Yn(e.y,t[0][1],t[1][1])}}function $a(e){const t=e.getRootNode();return"elementFromPoint"in t?t:window.document}function Nn(e){return e&&typeof e=="object"&&"id"in e&&"source"in e&&"target"in e}function zn(e){return e&&typeof e=="object"&&"id"in e&&"position"in e&&!Nn(e)}function Co(e){return zn(e)&&"computedPosition"in e}function yi(e){return!Number.isNaN(e)&&Number.isFinite(e)}function v2(e){return yi(e.width)&&yi(e.height)&&yi(e.x)&&yi(e.y)}function m2(e,t,n){const o={id:e.id.toString(),type:e.type??"default",dimensions:an({width:0,height:0}),computedPosition:an({z:0,...e.position}),handleBounds:{source:[],target:[]},draggable:void 0,selectable:void 0,connectable:void 0,focusable:void 0,selected:!1,dragging:!1,resizing:!1,initialized:!1,isParent:!1,position:{x:0,y:0},data:He(e.data)?e.data:{},events:an(He(e.events)?e.events:{})};return Object.assign(t??o,e,{id:e.id.toString(),parentNode:n})}function wd(e,t,n){var o,i;const s={id:e.id.toString(),type:e.type??t?.type??"default",source:e.source.toString(),target:e.target.toString(),sourceHandle:(o=e.sourceHandle)==null?void 0:o.toString(),targetHandle:(i=e.targetHandle)==null?void 0:i.toString(),updatable:e.updatable??n?.updatable,selectable:e.selectable??n?.selectable,focusable:e.focusable??n?.focusable,data:He(e.data)?e.data:{},events:an(He(e.events)?e.events:{}),label:e.label??"",interactionWidth:e.interactionWidth??n?.interactionWidth,...n??{}};return Object.assign(t??s,e,{id:e.id.toString()})}function xd(e,t,n,o){const i=typeof e=="string"?e:e.id,s=new Set,r=o==="source"?"target":"source";for(const l of n)l[r]===i&&s.add(l[o]);return t.filter(l=>s.has(l.id))}function y2(...e){if(e.length===3){const[s,r,l]=e;return xd(s,r,l,"target")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(s=>Nn(s)&&s.source===o).map(s=>n.find(r=>zn(r)&&r.id===s.target))}function _2(...e){if(e.length===3){const[s,r,l]=e;return xd(s,r,l,"source")}const[t,n]=e,o=typeof t=="string"?t:t.id;return n.filter(s=>Nn(s)&&s.target===o).map(s=>n.find(r=>zn(r)&&r.id===s.source))}function Ed({source:e,sourceHandle:t,target:n,targetHandle:o}){return`vueflow__edge-${e}${t??""}-${n}${o??""}`}function b2(e,t){return t.some(n=>Nn(n)&&n.source===e.source&&n.target===e.target&&(n.sourceHandle===e.sourceHandle||!n.sourceHandle&&!e.sourceHandle)&&(n.targetHandle===e.targetHandle||!n.targetHandle&&!e.targetHandle))}function Mr({x:e,y:t},{x:n,y:o,zoom:i}){return{x:e*i+n,y:t*i+o}}function Qo({x:e,y:t},{x:n,y:o,zoom:i},s=!1,r=[1,1]){const l={x:(e-n)/i,y:(t-o)/i};return s?Es(l,r):l}function w2(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}}function Sd({x:e,y:t,width:n,height:o}){return{x:e,y:t,x2:e+n,y2:t+o}}function x2({x:e,y:t,x2:n,y2:o}){return{x:e,y:t,width:n-e,height:o-t}}function Cd(e){let t={x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY,x2:Number.NEGATIVE_INFINITY,y2:Number.NEGATIVE_INFINITY};for(let n=0;n0,N=(d??0)*(p??0);(b||E||h>=N||l.dragging)&&r.push(l)}return r}function Td(e,t){const n=new Set;if(typeof e=="string")n.add(e);else if(e.length>=1)for(const o of e)n.add(o.id);return t.filter(o=>n.has(o.source)||n.has(o.target))}function Ia(e,t,n,o,i,s=.1,r={x:0,y:0}){const l=t/(e.width*(1+s)),a=n/(e.height*(1+s)),u=Math.min(l,a),c=Yn(u,o,i),d=e.x+e.width/2,p=e.y+e.height/2,h=t/2-d*c+(r.x??0),b=n/2-p*c+(r.y??0);return{x:h,y:b,zoom:c}}function E2(e,t){return{x:t.x+e.x,y:t.y+e.y,z:(e.z>t.z?e.z:t.z)+1}}function Md(e,t){if(!e.parentNode)return!1;const n=t(e.parentNode);return n?n.selected?!0:Md(n,t):!1}function ei(e,t){return typeof e>"u"?"":typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}function ka(e,t,n){return en?-Yn(Math.abs(e-n),1,t)/t:0}function $d(e,t,n=15,o=40){const i=ka(e.x,o,t.width-o)*n,s=ka(e.y,o,t.height-o)*n;return[i,s]}function Ys(e,t){if(t){const n=e.position.x+e.dimensions.width-t.dimensions.width,o=e.position.y+e.dimensions.height-t.dimensions.height;if(n>0||o>0||e.position.x<0||e.position.y<0){let i={};if(typeof t.style=="function"?i={...t.style(t)}:t.style&&(i={...t.style}),i.width=i.width??`${t.dimensions.width}px`,i.height=i.height??`${t.dimensions.height}px`,n>0)if(typeof i.width=="string"){const s=Number(i.width.replace("px",""));i.width=`${s+n}px`}else i.width+=n;if(o>0)if(typeof i.height=="string"){const s=Number(i.height.replace("px",""));i.height=`${s+o}px`}else i.height+=o;if(e.position.x<0){const s=Math.abs(e.position.x);if(t.position.x=t.position.x-s,typeof i.width=="string"){const r=Number(i.width.replace("px",""));i.width=`${r+s}px`}else i.width+=s;e.position.x=0}if(e.position.y<0){const s=Math.abs(e.position.y);if(t.position.y=t.position.y-s,typeof i.height=="string"){const r=Number(i.height.replace("px",""));i.height=`${r+s}px`}else i.height+=s;e.position.y=0}t.dimensions.width=Number(i.width.toString().replace("px","")),t.dimensions.height=Number(i.height.toString().replace("px","")),typeof t.style=="function"?t.style=s=>{const r=t.style;return{...r(s),...i}}:t.style={...t.style,...i}}}}function Pa(e,t){var n,o;const i=e.filter(r=>r.type==="add"||r.type==="remove");for(const r of i)if(r.type==="add")t.findIndex(a=>a.id===r.item.id)===-1&&t.push(r.item);else if(r.type==="remove"){const l=t.findIndex(a=>a.id===r.id);l!==-1&&t.splice(l,1)}const s=t.map(r=>r.id);for(const r of t)for(const l of e)if(l.id===r.id)switch(l.type){case"select":r.selected=l.selected;break;case"position":if(Co(r)&&(typeof l.position<"u"&&(r.position=l.position),typeof l.dragging<"u"&&(r.dragging=l.dragging),r.expandParent&&r.parentNode)){const a=t[s.indexOf(r.parentNode)];a&&Co(a)&&Ys(r,a)}break;case"dimensions":if(Co(r)&&(typeof l.dimensions<"u"&&(r.dimensions=l.dimensions),typeof l.updateStyle<"u"&&l.updateStyle&&(r.style={...r.style||{},width:`${(n=l.dimensions)==null?void 0:n.width}px`,height:`${(o=l.dimensions)==null?void 0:o.height}px`}),typeof l.resizing<"u"&&(r.resizing=l.resizing),r.expandParent&&r.parentNode)){const a=t[s.indexOf(r.parentNode)];a&&Co(a)&&(!!a.dimensions.width&&!!a.dimensions.height?Ys(r,a):ht(()=>{Ys(r,a)}))}break}return t}function _n(e,t){return{id:e,type:"select",selected:t}}function Aa(e){return{item:e,type:"add"}}function Da(e){return{id:e,type:"remove"}}function Oa(e,t,n,o,i){return{id:e,source:t,target:n,sourceHandle:o||null,targetHandle:i||null,type:"remove"}}function xn(e,t=new Set,n=!1){const o=[];for(const[i,s]of e){const r=t.has(i);!(s.selected===void 0&&!r)&&s.selected!==r&&(n&&(s.selected=r),o.push(_n(s.id,r)))}return o}function re(e){const t=new Set;let n=!1;const o=()=>t.size>0;e&&(n=!0,t.add(e));const i=l=>{t.delete(l)};return{on:l=>{e&&n&&t.delete(e),t.add(l);const a=()=>{i(l),e&&n&&t.add(e)};return ms(a),{off:a}},off:i,trigger:l=>Promise.all(Array.from(t).map(a=>a(l))),hasListeners:o,fns:t}}function Ra(e,t,n){let o=e;do{if(o&&o.matches(t))return!0;if(o===n)return!1;o=o.parentElement}while(o);return!1}function S2(e,t,n,o,i){var s,r;const l=[];for(const a of e)(a.selected||a.id===i)&&(!a.parentNode||!Md(a,o))&&(a.draggable||t&&typeof a.draggable>"u")&&l.push(an({id:a.id,position:a.position||{x:0,y:0},distance:{x:n.x-((s=a.computedPosition)==null?void 0:s.x)||0,y:n.y-((r=a.computedPosition)==null?void 0:r.y)||0},from:a.computedPosition,extent:a.extent,parentNode:a.parentNode,dimensions:a.dimensions,expandParent:a.expandParent}));return l}function Ks({id:e,dragItems:t,findNode:n}){const o=[];for(const i of t){const s=n(i.id);s&&o.push(s)}return[e?o.find(i=>i.id===e):o[0],o]}function Id(e){if(Array.isArray(e))switch(e.length){case 1:return[e[0],e[0],e[0],e[0]];case 2:return[e[0],e[1],e[0],e[1]];case 3:return[e[0],e[1],e[2],e[1]];case 4:return e;default:return[0,0,0,0]}return[e,e,e,e]}function C2(e,t,n){const[o,i,s,r]=typeof e!="string"?Id(e.padding):[0,0,0,0];return n&&typeof n.computedPosition.x<"u"&&typeof n.computedPosition.y<"u"&&typeof n.dimensions.width<"u"&&typeof n.dimensions.height<"u"?[[n.computedPosition.x+r,n.computedPosition.y+o],[n.computedPosition.x+n.dimensions.width-i,n.computedPosition.y+n.dimensions.height-s]]:!1}function N2(e,t,n,o){let i=e.extent||n;if((i==="parent"||!Array.isArray(i)&&i?.range==="parent")&&!e.expandParent)if(e.parentNode&&o&&e.dimensions.width&&e.dimensions.height){const s=C2(i,e,o);s&&(i=s)}else t(new Ge(Ue.NODE_EXTENT_INVALID,e.id)),i=n;else if(Array.isArray(i)){const s=o?.computedPosition.x||0,r=o?.computedPosition.y||0;i=[[i[0][0]+s,i[0][1]+r],[i[1][0]+s,i[1][1]+r]]}else if(i!=="parent"&&i?.range&&Array.isArray(i.range)){const[s,r,l,a]=Id(i.padding),u=o?.computedPosition.x||0,c=o?.computedPosition.y||0;i=[[i.range[0][0]+u+a,i.range[0][1]+c+s],[i.range[1][0]+u-r,i.range[1][1]+c-l]]}return i==="parent"?[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]]:i}function T2({width:e,height:t},n){return[n[0],[n[1][0]-(e||0),n[1][1]-(t||0)]]}function rl(e,t,n,o,i){const s=T2(e.dimensions,N2(e,n,o,i)),r=bd(t,s);return{position:{x:r.x-(i?.computedPosition.x||0),y:r.y-(i?.computedPosition.y||0)},computedPosition:r}}function ho(e,t,n=ae.Left,o=!1){const i=(t?.x??0)+e.computedPosition.x,s=(t?.y??0)+e.computedPosition.y,{width:r,height:l}=t??k2(e);if(o)return{x:i+r/2,y:s+l/2};switch(t?.position??n){case ae.Top:return{x:i+r/2,y:s};case ae.Right:return{x:i+r,y:s+l/2};case ae.Bottom:return{x:i+r/2,y:s+l};case ae.Left:return{x:i,y:s+l/2}}}function Va(e,t){return e&&(t?e.find(n=>n.id===t):e[0])||null}function M2({sourcePos:e,targetPos:t,sourceWidth:n,sourceHeight:o,targetWidth:i,targetHeight:s,width:r,height:l,viewport:a}){const u={x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x+n,t.x+i),y2:Math.max(e.y+o,t.y+s)};u.x===u.x2&&(u.x2+=1),u.y===u.y2&&(u.y2+=1);const c=Sd({x:(0-a.x)/a.zoom,y:(0-a.y)/a.zoom,width:r/a.zoom,height:l/a.zoom}),d=Math.max(0,Math.min(c.x2,u.x2)-Math.max(c.x,u.x)),p=Math.max(0,Math.min(c.y2,u.y2)-Math.max(c.y,u.y));return Math.ceil(d*p)>0}function $2(e,t,n=!1){const o=typeof e.zIndex=="number";let i=o?e.zIndex:0;const s=t(e.source),r=t(e.target);return!s||!r?0:(n&&(i=o?e.zIndex:Math.max(s.computedPosition.z||0,r.computedPosition.z||0)),i)}var Ue=(e=>(e.MISSING_STYLES="MISSING_STYLES",e.MISSING_VIEWPORT_DIMENSIONS="MISSING_VIEWPORT_DIMENSIONS",e.NODE_INVALID="NODE_INVALID",e.NODE_NOT_FOUND="NODE_NOT_FOUND",e.NODE_MISSING_PARENT="NODE_MISSING_PARENT",e.NODE_TYPE_MISSING="NODE_TYPE_MISSING",e.NODE_EXTENT_INVALID="NODE_EXTENT_INVALID",e.EDGE_INVALID="EDGE_INVALID",e.EDGE_NOT_FOUND="EDGE_NOT_FOUND",e.EDGE_SOURCE_MISSING="EDGE_SOURCE_MISSING",e.EDGE_TARGET_MISSING="EDGE_TARGET_MISSING",e.EDGE_TYPE_MISSING="EDGE_TYPE_MISSING",e.EDGE_SOURCE_TARGET_SAME="EDGE_SOURCE_TARGET_SAME",e.EDGE_SOURCE_TARGET_MISSING="EDGE_SOURCE_TARGET_MISSING",e.EDGE_ORPHANED="EDGE_ORPHANED",e.USEVUEFLOW_OPTIONS="USEVUEFLOW_OPTIONS",e))(Ue||{});const Ba={MISSING_STYLES:()=>"It seems that you haven't loaded the necessary styles. Please import '@vue-flow/core/dist/style.css' to ensure that the graph is rendered correctly",MISSING_VIEWPORT_DIMENSIONS:()=>"The Vue Flow parent container needs a width and a height to render the graph",NODE_INVALID:e=>`Node is invalid +Node: ${e}`,NODE_NOT_FOUND:e=>`Node not found +Node: ${e}`,NODE_MISSING_PARENT:(e,t)=>`Node is missing a parent +Node: ${e} +Parent: ${t}`,NODE_TYPE_MISSING:e=>`Node type is missing +Type: ${e}`,NODE_EXTENT_INVALID:e=>`Only child nodes can use a parent extent +Node: ${e}`,EDGE_INVALID:e=>`An edge needs a source and a target +Edge: ${e}`,EDGE_SOURCE_MISSING:(e,t)=>`Edge source is missing +Edge: ${e} +Source: ${t}`,EDGE_TARGET_MISSING:(e,t)=>`Edge target is missing +Edge: ${e} +Target: ${t}`,EDGE_TYPE_MISSING:e=>`Edge type is missing +Type: ${e}`,EDGE_SOURCE_TARGET_SAME:(e,t,n)=>`Edge source and target are the same +Edge: ${e} +Source: ${t} +Target: ${n}`,EDGE_SOURCE_TARGET_MISSING:(e,t,n)=>`Edge source or target is missing +Edge: ${e} +Source: ${t} +Target: ${n}`,EDGE_ORPHANED:e=>`Edge was orphaned (suddenly missing source or target) and has been removed +Edge: ${e}`,EDGE_NOT_FOUND:e=>`Edge not found +Edge: ${e}`,USEVUEFLOW_OPTIONS:()=>"The options parameter is deprecated and will be removed in the next major version. Please use the id parameter instead"};class Ge extends Error{constructor(t,...n){var o;super((o=Ba[t])==null?void 0:o.call(Ba,...n)),this.name="VueFlowError",this.code=t,this.args=n}}function ll(e){return"clientX"in e}function I2(e){return"sourceEvent"in e}function Bt(e,t){const n=ll(e);let o,i;return n?(o=e.clientX,i=e.clientY):"touches"in e&&e.touches.length>0?(o=e.touches[0].clientX,i=e.touches[0].clientY):"changedTouches"in e&&e.changedTouches.length>0?(o=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY):(o=0,i=0),{x:o-(t?.left??0),y:i-(t?.top??0)}}const qi=()=>{var e;return typeof navigator<"u"&&((e=navigator?.userAgent)==null?void 0:e.indexOf("Mac"))>=0};function k2(e){var t,n;return{width:((t=e.dimensions)==null?void 0:t.width)??e.width??0,height:((n=e.dimensions)==null?void 0:n.height)??e.height??0}}function Es(e,t=[1,1]){return{x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}}const P2=()=>!0;function Xs(e){e?.classList.remove("valid","connecting","vue-flow__handle-valid","vue-flow__handle-connecting")}function A2(e,t,n){const o=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const s of t.values())Zi(i,Wi(s))>0&&o.push(s);return o}const D2=250;function O2(e,t,n,o){var i,s;let r=[],l=Number.POSITIVE_INFINITY;const a=A2(e,n,t+D2);for(const u of a){const c=[...((i=u.handleBounds)==null?void 0:i.source)??[],...((s=u.handleBounds)==null?void 0:s.target)??[]];for(const d of c){if(o.nodeId===d.nodeId&&o.type===d.type&&o.id===d.id)continue;const{x:p,y:h}=ho(u,d,d.position,!0),b=Math.sqrt((p-e.x)**2+(h-e.y)**2);b>t||(b1){const u=o.type==="source"?"target":"source";return r.find(c=>c.type===u)??r[0]}return r[0]}function La(e,{handle:t,connectionMode:n,fromNodeId:o,fromHandleId:i,fromType:s,doc:r,lib:l,flowId:a,isValidConnection:u=P2},c,d,p){const h=s==="target",b=t?r.querySelector(`.${l}-flow__handle[data-id="${a}-${t?.nodeId}-${t?.id}-${t?.type}"]`):null,{x:E,y:N}=Bt(e),M=r.elementFromPoint(E,N),P=M?.classList.contains(`${l}-flow__handle`)?M:b,g={handleDomNode:P,isValid:!1,connection:null,toHandle:null};if(P){const _=kd(void 0,P),O=P.getAttribute("data-nodeid"),U=P.getAttribute("data-handleid"),X=P.classList.contains("connectable"),H=P.classList.contains("connectableend");if(!O||!_)return g;const F={source:h?O:o,sourceHandle:h?U:i,target:h?o:O,targetHandle:h?i:U};g.connection=F;const j=X&&H&&(n===Cn.Strict?h&&_==="source"||!h&&_==="target":O!==o||U!==i);g.isValid=j&&u(F,{nodes:d,edges:c,sourceNode:p(o),targetNode:p(O)}),g.toHandle=t}return g}function kd(e,t){return e||(t?.classList.contains("target")?"target":t?.classList.contains("source")?"source":null)}function R2(e,t){let n=null;return t?n="valid":e&&!t&&(n="invalid"),n}function V2(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}function B2(e,t,n,o,i,s=!1){var r,l,a;const u=o.get(e);if(!u)return null;const c=i===Cn.Strict?(r=u.handleBounds)==null?void 0:r[t]:[...((l=u.handleBounds)==null?void 0:l.source)??[],...((a=u.handleBounds)==null?void 0:a.target)??[]],d=(n?c?.find(p=>p.id===n):c?.[0])??null;return d&&s?{...d,...ho(u,d,d.position,!0)}:d}const $r={[ae.Left]:ae.Right,[ae.Right]:ae.Left,[ae.Top]:ae.Bottom,[ae.Bottom]:ae.Top},L2=["production","prod"];function Ss(e,...t){Pd()&&console.warn(`[Vue Flow]: ${e}`,...t)}function Pd(){return!L2.includes("production")}function Fa(e,t,n,o,i){const s=t.querySelectorAll(`.vue-flow__handle.${e}`);return s?.length?Array.from(s).map(r=>{const l=r.getBoundingClientRect();return{id:r.getAttribute("data-handleid"),type:e,nodeId:i,position:r.getAttribute("data-handlepos"),x:(l.left-n.left)/o,y:(l.top-n.top)/o,...xs(r)}}):null}function Ir(e,t,n,o,i,s=!1,r){i.value=!1,e.selected?(s||e.selected&&t)&&(o([e]),ht(()=>{r.blur()})):n([e])}function He(e){return typeof oe(e)<"u"}function F2(e,t,n,o){if(!e||!e.source||!e.target)return n(new Ge(Ue.EDGE_INVALID,e?.id??"[ID UNKNOWN]")),!1;let i;return Nn(e)?i=e:i={...e,id:Ed(e)},i=wd(i,void 0,o),b2(i,t)?!1:i}function z2(e,t,n,o,i){if(!t.source||!t.target)return i(new Ge(Ue.EDGE_INVALID,e.id)),!1;if(!n)return i(new Ge(Ue.EDGE_NOT_FOUND,e.id)),!1;const{id:s,...r}=e;return{...r,id:o?Ed(t):s,source:t.source,target:t.target,sourceHandle:t.sourceHandle,targetHandle:t.targetHandle}}function za(e,t,n){const o={},i=[];for(let s=0;sl.id===s.parentNode);s.parentNode&&!r&&n(new Ge(Ue.NODE_MISSING_PARENT,s.id,s.parentNode)),(s.parentNode||o[s.id])&&(o[s.id]&&(s.isParent=!0),r&&(r.isParent=!0))}return i}function Ha(e,t,n,o,i,s){let r=i;const l=o.get(r)||new Map;o.set(r,l.set(n,t)),r=`${i}-${e}`;const a=o.get(r)||new Map;if(o.set(r,a.set(n,t)),s){r=`${i}-${e}-${s}`;const u=o.get(r)||new Map;o.set(r,u.set(n,t))}}function Ws(e,t,n){e.clear();for(const o of n){const{source:i,target:s,sourceHandle:r=null,targetHandle:l=null}=o,a={edgeId:o.id,source:i,target:s,sourceHandle:r,targetHandle:l},u=`${i}-${r}--${s}-${l}`,c=`${s}-${l}--${i}-${r}`;Ha("source",a,c,e,i,r),Ha("target",a,u,e,s,l)}}function Ua(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function Zs(e,t,n,o,i,s,r,l){const a=[];for(const u of e){const c=Nn(u)?u:F2(u,l,i,s);if(!c)continue;const d=n(c.source),p=n(c.target);if(!d||!p){i(new Ge(Ue.EDGE_SOURCE_TARGET_MISSING,c.id,c.source,c.target));continue}if(!d){i(new Ge(Ue.EDGE_SOURCE_MISSING,c.id,c.source));continue}if(!p){i(new Ge(Ue.EDGE_TARGET_MISSING,c.id,c.target));continue}if(t&&!t(c,{edges:l,nodes:r,sourceNode:d,targetNode:p})){i(new Ge(Ue.EDGE_INVALID,c.id));continue}const h=o(c.id);a.push({...wd(c,h,s),sourceNode:d,targetNode:p})}return a}const Ga=Symbol("vueFlow"),Ad=Symbol("nodeId"),Dd=Symbol("nodeRef"),H2=Symbol("edgeId"),U2=Symbol("edgeRef"),Cs=Symbol("slots");function Od(e){const{vueFlowRef:t,snapToGrid:n,snapGrid:o,noDragClassName:i,nodes:s,nodeExtent:r,nodeDragThreshold:l,viewport:a,autoPanOnNodeDrag:u,autoPanSpeed:c,nodesDraggable:d,panBy:p,findNode:h,multiSelectionActive:b,nodesSelectionActive:E,selectNodesOnDrag:N,removeSelectedElements:M,addSelectedNodes:P,updateNodePositions:g,emits:_}=Fe(),{onStart:O,onDrag:U,onStop:X,onClick:H,el:F,disabled:Z,id:j,selectable:C,dragHandle:ee}=e,T=zo(!1);let G=[],k,L=null,$={x:void 0,y:void 0},D={x:0,y:0},V=null,Y=!1,J=0,ue=!1;const Q=Y2(),ie=({x:de,y:w})=>{$={x:de,y:w};let S=!1;if(G=G.map(f=>{const v={x:de-f.distance.x,y:w-f.distance.y},{computedPosition:y}=rl(f,n.value?Es(v,o.value):v,_.error,r.value,f.parentNode?h(f.parentNode):void 0);return S=S||f.position.x!==y.x||f.position.y!==y.y,f.position=y,f}),!!S&&(g(G,!0,!0),T.value=!0,V)){const[f,v]=Ks({id:j,dragItems:G,findNode:h});U({event:V,node:f,nodes:v})}},le=()=>{if(!L)return;const[de,w]=$d(D,L,c.value);if(de!==0||w!==0){const S={x:($.x??0)-de/a.value.zoom,y:($.y??0)-w/a.value.zoom};p({x:de,y:w})&&ie(S)}J=requestAnimationFrame(le)},me=(de,w)=>{Y=!0;const S=h(j);!N.value&&!b.value&&S&&(S.selected||M()),S&&Ee(C)&&N.value&&Ir(S,b.value,P,M,E,!1,w);const f=Q(de.sourceEvent);if($=f,G=S2(s.value,d.value,f,h,j),G.length){const[v,y]=Ks({id:j,dragItems:G,findNode:h});O({event:de.sourceEvent,node:v,nodes:y})}},be=(de,w)=>{var S;de.sourceEvent.type==="touchmove"&&de.sourceEvent.touches.length>1||(l.value===0&&me(de,w),$=Q(de.sourceEvent),L=((S=t.value)==null?void 0:S.getBoundingClientRect())||null,D=Bt(de.sourceEvent,L))},fe=(de,w)=>{const S=Q(de.sourceEvent);if(!ue&&Y&&u.value&&(ue=!0,le()),!Y){const f=S.xSnapped-($.x??0),v=S.ySnapped-($.y??0);Math.sqrt(f*f+v*v)>l.value&&me(de,w)}($.x!==S.xSnapped||$.y!==S.ySnapped)&&G.length&&Y&&(V=de.sourceEvent,D=Bt(de.sourceEvent,L),ie(S))},we=de=>{let w=!1;if(!Y&&!T.value&&!b.value){const S=de.sourceEvent,f=Q(S),v=f.xSnapped-($.x??0),y=f.ySnapped-($.y??0),m=Math.sqrt(v*v+y*y);m!==0&&m<=l.value&&(H?.(S),w=!0)}if(G.length&&!w){g(G,!1,!1);const[S,f]=Ks({id:j,dragItems:G,findNode:h});X({event:de.sourceEvent,node:S,nodes:f})}G=[],T.value=!1,ue=!1,Y=!1,$={x:void 0,y:void 0},cancelAnimationFrame(J)};return xe([()=>Ee(Z),F],([de,w],S,f)=>{if(w){const v=wt(w);de||(k=v0().on("start",y=>be(y,w)).on("drag",y=>fe(y,w)).on("end",y=>we(y)).filter(y=>{const m=y.target,I=Ee(ee);return!y.button&&(!i.value||!Ra(m,`.${i.value}`,w)&&(!I||Ra(m,I,w)))}),v.call(k)),f(()=>{v.on(".drag",null),k&&(k.on("start",null),k.on("drag",null),k.on("end",null))})}}),T}function G2(){return{doubleClick:re(),click:re(),mouseEnter:re(),mouseMove:re(),mouseLeave:re(),contextMenu:re(),updateStart:re(),update:re(),updateEnd:re()}}function j2(e,t){const n=G2();return n.doubleClick.on(o=>{var i,s;t.edgeDoubleClick(o),(s=(i=e.events)==null?void 0:i.doubleClick)==null||s.call(i,o)}),n.click.on(o=>{var i,s;t.edgeClick(o),(s=(i=e.events)==null?void 0:i.click)==null||s.call(i,o)}),n.mouseEnter.on(o=>{var i,s;t.edgeMouseEnter(o),(s=(i=e.events)==null?void 0:i.mouseEnter)==null||s.call(i,o)}),n.mouseMove.on(o=>{var i,s;t.edgeMouseMove(o),(s=(i=e.events)==null?void 0:i.mouseMove)==null||s.call(i,o)}),n.mouseLeave.on(o=>{var i,s;t.edgeMouseLeave(o),(s=(i=e.events)==null?void 0:i.mouseLeave)==null||s.call(i,o)}),n.contextMenu.on(o=>{var i,s;t.edgeContextMenu(o),(s=(i=e.events)==null?void 0:i.contextMenu)==null||s.call(i,o)}),n.updateStart.on(o=>{var i,s;t.edgeUpdateStart(o),(s=(i=e.events)==null?void 0:i.updateStart)==null||s.call(i,o)}),n.update.on(o=>{var i,s;t.edgeUpdate(o),(s=(i=e.events)==null?void 0:i.update)==null||s.call(i,o)}),n.updateEnd.on(o=>{var i,s;t.edgeUpdateEnd(o),(s=(i=e.events)==null?void 0:i.updateEnd)==null||s.call(i,o)}),Object.entries(n).reduce((o,[i,s])=>(o.emit[i]=s.trigger,o.on[i]=s.on,o),{emit:{},on:{}})}function Y2(){const{viewport:e,snapGrid:t,snapToGrid:n,vueFlowRef:o}=Fe();return i=>{var s;const r=((s=o.value)==null?void 0:s.getBoundingClientRect())??{left:0,top:0},l=I2(i)?i.sourceEvent:i,{x:a,y:u}=Bt(l,r),c=Qo({x:a,y:u},e.value),{x:d,y:p}=n.value?Es(c,t.value):c;return{xSnapped:d,ySnapped:p,...c}}}function _i(){return!0}function Rd({handleId:e,nodeId:t,type:n,isValidConnection:o,edgeUpdaterType:i,onEdgeUpdate:s,onEdgeUpdateEnd:r}){const{id:l,vueFlowRef:a,connectionMode:u,connectionRadius:c,connectOnClick:d,connectionClickStartHandle:p,nodesConnectable:h,autoPanOnConnect:b,autoPanSpeed:E,findNode:N,panBy:M,startConnection:P,updateConnection:g,endConnection:_,emits:O,viewport:U,edges:X,nodes:H,isValidConnection:F,nodeLookup:Z}=Fe();let j=null,C=!1,ee=null;function T(k){var L;const $=Ee(n)==="target",D=ll(k),V=$a(k.target);if(D&&k.button===0||!D){let Y=function(q){f=Bt(q,de),ie=O2(Qo(f,U.value,!1,[1,1]),c.value,Z.value,m),v||(y(),v=!0);const K=La(q,{handle:ie,connectionMode:u.value,fromNodeId:Ee(t),fromHandleId:Ee(e),fromType:$?"target":"source",isValidConnection:Q,doc:V,lib:"vue",flowId:l,nodeLookup:Z.value},X.value,H.value,N);ee=K.handleDomNode,j=K.connection,C=V2(!!ie,K.isValid);const ne={...A,isValid:C,to:K.toHandle&&C?Mr({x:K.toHandle.x,y:K.toHandle.y},U.value):f,toHandle:K.toHandle,toPosition:C&&K.toHandle?K.toHandle.position:$r[m.position],toNode:K.toHandle?Z.value.get(K.toHandle.nodeId):null};if(!(C&&ie&&A?.toHandle&&ne.toHandle&&A.toHandle.type===ne.toHandle.type&&A.toHandle.nodeId===ne.toHandle.nodeId&&A.toHandle.id===ne.toHandle.id&&A.to.x===ne.to.x&&A.to.y===ne.to.y)){if(g(ie&&C?Mr({x:ie.x,y:ie.y},U.value):f,K.toHandle,R2(!!ie,C)),A=ne,!ie&&!C&&!ee)return Xs(S);j&&j.source!==j.target&&ee&&(Xs(S),S=ee,ee.classList.add("connecting","vue-flow__handle-connecting"),ee.classList.toggle("valid",!!C),ee.classList.toggle("vue-flow__handle-valid",!!C))}},J=function(q){(ie||ee)&&j&&C&&(s?s(q,j):O.connect(j)),O.connectEnd(q),i&&r?.(q),Xs(S),cancelAnimationFrame(le),_(q),v=!1,C=!1,j=null,ee=null,V.removeEventListener("mousemove",Y),V.removeEventListener("mouseup",J),V.removeEventListener("touchmove",Y),V.removeEventListener("touchend",J)};const ue=N(Ee(t));let Q=Ee(o)||F.value||_i;!Q&&ue&&(Q=($?ue.isValidSourcePos:ue.isValidTargetPos)||_i);let ie,le=0;const{x:me,y:be}=Bt(k),fe=V?.elementFromPoint(me,be),we=kd(Ee(i),fe),de=(L=a.value)==null?void 0:L.getBoundingClientRect();if(!de||!we)return;const w=B2(Ee(t),we,Ee(e),Z.value,u.value);if(!w)return;let S,f=Bt(k,de),v=!1;const y=()=>{if(!b.value)return;const[q,K]=$d(f,de,E.value);M({x:q,y:K}),le=requestAnimationFrame(y)},m={...w,nodeId:Ee(t),type:we,position:w.position},I=Z.value.get(Ee(t)),R={inProgress:!0,isValid:null,from:ho(I,m,ae.Left,!0),fromHandle:m,fromPosition:m.position,fromNode:I,to:f,toHandle:null,toPosition:$r[m.position],toNode:null};P({nodeId:Ee(t),id:Ee(e),type:we,position:fe?.getAttribute("data-handlepos")||ae.Top,...f},{x:me-de.left,y:be-de.top}),O.connectStart({event:k,nodeId:Ee(t),handleId:Ee(e),handleType:we});let A=R;V.addEventListener("mousemove",Y),V.addEventListener("mouseup",J),V.addEventListener("touchmove",Y),V.addEventListener("touchend",J)}}function G(k){var L,$;if(!d.value)return;const D=Ee(n)==="target";if(!p.value){O.clickConnectStart({event:k,nodeId:Ee(t),handleId:Ee(e)}),P({nodeId:Ee(t),type:Ee(n),id:Ee(e),position:ae.Top,...Bt(k)},void 0,!0);return}let V=Ee(o)||F.value||_i;const Y=N(Ee(t));if(!V&&Y&&(V=(D?Y.isValidSourcePos:Y.isValidTargetPos)||_i),Y&&(typeof Y.connectable>"u"?h.value:Y.connectable)===!1)return;const J=$a(k.target),ue=La(k,{handle:{nodeId:Ee(t),id:Ee(e),type:Ee(n),position:ae.Top,...Bt(k)},connectionMode:u.value,fromNodeId:p.value.nodeId,fromHandleId:p.value.id??null,fromType:p.value.type,isValidConnection:V,doc:J,lib:"vue",flowId:l,nodeLookup:Z.value},X.value,H.value,N),Q=((L=ue.connection)==null?void 0:L.source)===(($=ue.connection)==null?void 0:$.target);ue.isValid&&ue.connection&&!Q&&O.connect(ue.connection),O.clickConnectEnd(k),_(k,!0)}return{handlePointerDown:T,handleClick:G}}function K2(){return mt(Ad,"")}function Vd(e){const t=e??K2()??"",n=mt(Dd,te(null)),{findNode:o,edges:i,emits:s}=Fe(),r=o(t);return r||s.error(new Ge(Ue.NODE_NOT_FOUND,t)),{id:t,nodeEl:n,node:r,parentNode:pe(()=>o(r.parentNode)),connectedEdges:pe(()=>Td([r],i.value))}}function X2(){return{doubleClick:re(),click:re(),mouseEnter:re(),mouseMove:re(),mouseLeave:re(),contextMenu:re(),dragStart:re(),drag:re(),dragStop:re()}}function W2(e,t){const n=X2();return n.doubleClick.on(o=>{var i,s;t.nodeDoubleClick(o),(s=(i=e.events)==null?void 0:i.doubleClick)==null||s.call(i,o)}),n.click.on(o=>{var i,s;t.nodeClick(o),(s=(i=e.events)==null?void 0:i.click)==null||s.call(i,o)}),n.mouseEnter.on(o=>{var i,s;t.nodeMouseEnter(o),(s=(i=e.events)==null?void 0:i.mouseEnter)==null||s.call(i,o)}),n.mouseMove.on(o=>{var i,s;t.nodeMouseMove(o),(s=(i=e.events)==null?void 0:i.mouseMove)==null||s.call(i,o)}),n.mouseLeave.on(o=>{var i,s;t.nodeMouseLeave(o),(s=(i=e.events)==null?void 0:i.mouseLeave)==null||s.call(i,o)}),n.contextMenu.on(o=>{var i,s;t.nodeContextMenu(o),(s=(i=e.events)==null?void 0:i.contextMenu)==null||s.call(i,o)}),n.dragStart.on(o=>{var i,s;t.nodeDragStart(o),(s=(i=e.events)==null?void 0:i.dragStart)==null||s.call(i,o)}),n.drag.on(o=>{var i,s;t.nodeDrag(o),(s=(i=e.events)==null?void 0:i.drag)==null||s.call(i,o)}),n.dragStop.on(o=>{var i,s;t.nodeDragStop(o),(s=(i=e.events)==null?void 0:i.dragStop)==null||s.call(i,o)}),Object.entries(n).reduce((o,[i,s])=>(o.emit[i]=s.trigger,o.on[i]=s.on,o),{emit:{},on:{}})}function Bd(){const{getSelectedNodes:e,nodeExtent:t,updateNodePositions:n,findNode:o,snapGrid:i,snapToGrid:s,nodesDraggable:r,emits:l}=Fe();return(a,u=!1)=>{const c=s.value?i.value[0]:5,d=s.value?i.value[1]:5,p=u?4:1,h=a.x*c*p,b=a.y*d*p,E=[];for(const N of e.value)if(N.draggable||r&&typeof N.draggable>"u"){const M={x:N.computedPosition.x+h,y:N.computedPosition.y+b},{computedPosition:P}=rl(N,M,l.error,t.value,N.parentNode?o(N.parentNode):void 0);E.push({id:N.id,position:P,from:N.position,distance:{x:a.x,y:a.y},dimensions:N.dimensions})}n(E,!0,!1)}}const qs=.1,Z2=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2;function vn(){return Ss("Viewport not initialized yet."),Promise.resolve(!1)}const q2={zoomIn:vn,zoomOut:vn,zoomTo:vn,fitView:vn,setCenter:vn,fitBounds:vn,project:e=>e,screenToFlowCoordinate:e=>e,flowToScreenCoordinate:e=>e,setViewport:vn,setTransform:vn,getViewport:()=>({x:0,y:0,zoom:1}),getTransform:()=>({x:0,y:0,zoom:1}),viewportInitialized:!1};function J2(e){function t(o,i){return new Promise(s=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate(i?.interpolate==="linear"?Ro:$i).scaleBy(Js(e.d3Selection,i?.duration,i?.ease,()=>{s(!0)}),o):s(!1)})}function n(o,i,s,r){return new Promise(l=>{var a;const{x:u,y:c}=bd({x:-o,y:-i},e.translateExtent),d=fo.translate(-u,-c).scale(s);e.d3Selection&&e.d3Zoom?(a=e.d3Zoom)==null||a.interpolate(r?.interpolate==="linear"?Ro:$i).transform(Js(e.d3Selection,r?.duration,r?.ease,()=>{l(!0)}),d):l(!1)})}return pe(()=>e.d3Zoom&&e.d3Selection&&e.dimensions.width&&e.dimensions.height?{viewportInitialized:!0,zoomIn:i=>t(1.2,i),zoomOut:i=>t(1/1.2,i),zoomTo:(i,s)=>new Promise(r=>{e.d3Selection&&e.d3Zoom?e.d3Zoom.interpolate(s?.interpolate==="linear"?Ro:$i).scaleTo(Js(e.d3Selection,s?.duration,s?.ease,()=>{r(!0)}),i):r(!1)}),setViewport:(i,s)=>n(i.x,i.y,i.zoom,s),setTransform:(i,s)=>n(i.x,i.y,i.zoom,s),getViewport:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),getTransform:()=>({x:e.viewport.x,y:e.viewport.y,zoom:e.viewport.zoom}),fitView:(i={padding:qs,includeHiddenNodes:!1,duration:0})=>{var s,r;const l=[];for(const p of e.nodes)p.dimensions.width&&p.dimensions.height&&(i?.includeHiddenNodes||!p.hidden)&&(!((s=i.nodes)!=null&&s.length)||(r=i.nodes)!=null&&r.length&&i.nodes.includes(p.id))&&l.push(p);if(!l.length)return Promise.resolve(!1);const a=Cd(l),{x:u,y:c,zoom:d}=Ia(a,e.dimensions.width,e.dimensions.height,i.minZoom??e.minZoom,i.maxZoom??e.maxZoom,i.padding??qs,i.offset);return n(u,c,d,i)},setCenter:(i,s,r)=>{const l=typeof r?.zoom<"u"?r.zoom:e.maxZoom,a=e.dimensions.width/2-i*l,u=e.dimensions.height/2-s*l;return n(a,u,l,r)},fitBounds:(i,s={padding:qs})=>{const{x:r,y:l,zoom:a}=Ia(i,e.dimensions.width,e.dimensions.height,e.minZoom,e.maxZoom,s.padding);return n(r,l,a,s)},project:i=>Qo(i,e.viewport,e.snapToGrid,e.snapGrid),screenToFlowCoordinate:i=>{if(e.vueFlowRef){const{x:s,y:r}=e.vueFlowRef.getBoundingClientRect(),l={x:i.x-s,y:i.y-r};return Qo(l,e.viewport,e.snapToGrid,e.snapGrid)}return{x:0,y:0}},flowToScreenCoordinate:i=>{if(e.vueFlowRef){const{x:s,y:r}=e.vueFlowRef.getBoundingClientRect(),l={x:i.x+s,y:i.y+r};return Mr(l,e.viewport)}return{x:0,y:0}}}:q2)}function Js(e,t=0,n=Z2,o=()=>{}){const i=typeof t=="number"&&t>0;return i||o(),i?e.transition().duration(t).ease(n).on("end",o):e}function Q2(e,t,n){const o=os(!0);return o.run(()=>{const i=()=>{o.run(()=>{let E,N,M=!!(n.nodes.value.length||n.edges.value.length);E=Zn([e.modelValue,()=>{var P,g;return(g=(P=e.modelValue)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setElements(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.nodes,n.edges,()=>n.edges.value.length,()=>n.nodes.value.length],([P,g])=>{var _;(_=e.modelValue)!=null&&_.value&&Array.isArray(e.modelValue.value)&&(E?.pause(),e.modelValue.value=[...P,...g],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},s=()=>{o.run(()=>{let E,N,M=!!n.nodes.value.length;E=Zn([e.nodes,()=>{var P,g;return(g=(P=e.nodes)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setNodes(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.nodes,()=>n.nodes.value.length],([P])=>{var g;(g=e.nodes)!=null&&g.value&&Array.isArray(e.nodes.value)&&(E?.pause(),e.nodes.value=[...P],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},r=()=>{o.run(()=>{let E,N,M=!!n.edges.value.length;E=Zn([e.edges,()=>{var P,g;return(g=(P=e.edges)==null?void 0:P.value)==null?void 0:g.length}],([P])=>{P&&Array.isArray(P)&&(N?.pause(),n.setEdges(P),!N&&!M&&P.length?M=!0:N?.resume())}),N=Zn([n.edges,()=>n.edges.value.length],([P])=>{var g;(g=e.edges)!=null&&g.value&&Array.isArray(e.edges.value)&&(E?.pause(),e.edges.value=[...P],ht(()=>{E?.resume()}))},{immediate:M}),To(()=>{E?.stop(),N?.stop()})})},l=()=>{o.run(()=>{xe(()=>t.maxZoom,()=>{t.maxZoom&&He(t.maxZoom)&&n.setMaxZoom(t.maxZoom)},{immediate:!0})})},a=()=>{o.run(()=>{xe(()=>t.minZoom,()=>{t.minZoom&&He(t.minZoom)&&n.setMinZoom(t.minZoom)},{immediate:!0})})},u=()=>{o.run(()=>{xe(()=>t.translateExtent,()=>{t.translateExtent&&He(t.translateExtent)&&n.setTranslateExtent(t.translateExtent)},{immediate:!0})})},c=()=>{o.run(()=>{xe(()=>t.nodeExtent,()=>{t.nodeExtent&&He(t.nodeExtent)&&n.setNodeExtent(t.nodeExtent)},{immediate:!0})})},d=()=>{o.run(()=>{xe(()=>t.applyDefault,()=>{He(t.applyDefault)&&(n.applyDefault.value=t.applyDefault)},{immediate:!0})})},p=()=>{o.run(()=>{const E=async N=>{let M=N;typeof t.autoConnect=="function"&&(M=await t.autoConnect(N)),M!==!1&&n.addEdges([M])};xe(()=>t.autoConnect,()=>{He(t.autoConnect)&&(n.autoConnect.value=t.autoConnect)},{immediate:!0}),xe(n.autoConnect,(N,M,P)=>{N?n.onConnect(E):n.hooks.value.connect.off(E),P(()=>{n.hooks.value.connect.off(E)})},{immediate:!0})})},h=()=>{const E=["id","modelValue","translateExtent","nodeExtent","edges","nodes","maxZoom","minZoom","applyDefault","autoConnect"];for(const N of Object.keys(t)){const M=N;if(!E.includes(M)){const P=Ve(()=>t[M]),g=n[M];Oe(g)&&o.run(()=>{xe(P,_=>{He(_)&&(g.value=_)},{immediate:!0})})}}};(()=>{i(),s(),r(),a(),l(),u(),c(),d(),p(),h()})()}),()=>o.stop()}function e_(){return{edgesChange:re(),nodesChange:re(),nodeDoubleClick:re(),nodeClick:re(),nodeMouseEnter:re(),nodeMouseMove:re(),nodeMouseLeave:re(),nodeContextMenu:re(),nodeDragStart:re(),nodeDrag:re(),nodeDragStop:re(),nodesInitialized:re(),miniMapNodeClick:re(),miniMapNodeDoubleClick:re(),miniMapNodeMouseEnter:re(),miniMapNodeMouseMove:re(),miniMapNodeMouseLeave:re(),connect:re(),connectStart:re(),connectEnd:re(),clickConnectStart:re(),clickConnectEnd:re(),paneReady:re(),init:re(),move:re(),moveStart:re(),moveEnd:re(),selectionDragStart:re(),selectionDrag:re(),selectionDragStop:re(),selectionContextMenu:re(),selectionStart:re(),selectionEnd:re(),viewportChangeStart:re(),viewportChange:re(),viewportChangeEnd:re(),paneScroll:re(),paneClick:re(),paneContextMenu:re(),paneMouseEnter:re(),paneMouseMove:re(),paneMouseLeave:re(),edgeContextMenu:re(),edgeMouseEnter:re(),edgeMouseMove:re(),edgeMouseLeave:re(),edgeDoubleClick:re(),edgeClick:re(),edgeUpdateStart:re(),edgeUpdate:re(),edgeUpdateEnd:re(),updateNodeInternals:re(),error:re(e=>Ss(e.message))}}function t_(e,t){Au(()=>{for(const[n,o]of Object.entries(t.value)){const i=s=>{e(n,s)};o.fns.add(i),ms(()=>{o.off(i)})}})}function Ld(){return{vueFlowRef:null,viewportRef:null,nodes:[],edges:[],connectionLookup:new Map,nodeTypes:{},edgeTypes:{},initialized:!1,dimensions:{width:0,height:0},viewport:{x:0,y:0,zoom:1},d3Zoom:null,d3Selection:null,d3ZoomHandler:null,minZoom:.5,maxZoom:2,translateExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],nodeExtent:[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],selectionMode:sl.Full,paneDragging:!1,preventScrolling:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!0,panOnScroll:!1,panOnScrollSpeed:.5,panOnScrollMode:Vo.Free,paneClickDistance:0,panOnDrag:!0,edgeUpdaterRadius:10,onlyRenderVisibleElements:!1,defaultViewport:{x:0,y:0,zoom:1},nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,defaultMarkerColor:"#b1b1b7",connectionLineStyle:{},connectionLineType:null,connectionLineOptions:{type:An.Bezier,style:{}},connectionMode:Cn.Loose,connectionStartHandle:null,connectionEndHandle:null,connectionClickStartHandle:null,connectionPosition:{x:Number.NaN,y:Number.NaN},connectionRadius:20,connectOnClick:!0,connectionStatus:null,isValidConnection:null,snapGrid:[15,15],snapToGrid:!1,edgesUpdatable:!1,edgesFocusable:!0,nodesFocusable:!0,nodesConnectable:!0,nodesDraggable:!0,nodeDragThreshold:1,elementsSelectable:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,selectionKeyCode:"Shift",multiSelectionKeyCode:qi()?"Meta":"Control",zoomActivationKeyCode:qi()?"Meta":"Control",deleteKeyCode:"Backspace",panActivationKeyCode:"Space",hooks:e_(),applyDefault:!0,autoConnect:!1,fitViewOnInit:!1,fitViewOnInitDone:!1,noDragClassName:"nodrag",noWheelClassName:"nowheel",noPanClassName:"nopan",defaultEdgeOptions:void 0,elevateEdgesOnSelect:!1,elevateNodesOnSelect:!0,autoPanOnNodeDrag:!0,autoPanOnConnect:!0,autoPanSpeed:15,disableKeyboardA11y:!1,ariaLiveMessage:""}}const n_=["id","vueFlowRef","viewportRef","initialized","modelValue","nodes","edges","maxZoom","minZoom","translateExtent","hooks","defaultEdgeOptions"];function o_(e,t,n){const o=J2(e),i=f=>{const v=f??[];e.hooks.updateNodeInternals.trigger(v)},s=f=>_2(f,e.nodes,e.edges),r=f=>y2(f,e.nodes,e.edges),l=f=>Td(f,e.edges),a=({id:f,type:v,nodeId:y})=>{var m;return Array.from(((m=e.connectionLookup.get(`${y}-${v}-${f??null}`))==null?void 0:m.values())??[])},u=f=>{if(f)return t.value.get(f)},c=f=>{if(f)return n.value.get(f)},d=(f,v,y)=>{var m,I;const B=[];for(const R of f){const A={id:R.id,type:"position",dragging:y,from:R.from};if(v&&(A.position=R.position,R.parentNode)){const q=u(R.parentNode);A.position={x:A.position.x-(((m=q?.computedPosition)==null?void 0:m.x)??0),y:A.position.y-(((I=q?.computedPosition)==null?void 0:I.y)??0)}}B.push(A)}B?.length&&e.hooks.nodesChange.trigger(B)},p=f=>{if(!e.vueFlowRef)return;const v=e.vueFlowRef.querySelector(".vue-flow__transformationpane");if(!v)return;const y=window.getComputedStyle(v),{m22:m}=new window.DOMMatrixReadOnly(y.transform),I=[];for(const B of f){const R=B,A=u(R.id);if(A){const q=xs(R.nodeElement);if(!!(q.width&&q.height&&(A.dimensions.width!==q.width||A.dimensions.height!==q.height||R.forceUpdate))){const ne=R.nodeElement.getBoundingClientRect();A.dimensions=q,A.handleBounds.source=Fa("source",R.nodeElement,ne,m,A.id),A.handleBounds.target=Fa("target",R.nodeElement,ne,m,A.id),I.push({id:A.id,type:"dimensions",dimensions:q})}}}!e.fitViewOnInitDone&&e.fitViewOnInit&&o.value.fitView().then(()=>{e.fitViewOnInitDone=!0}),I.length&&e.hooks.nodesChange.trigger(I)},h=(f,v)=>{const y=new Set,m=new Set;for(const R of f)zn(R)?y.add(R.id):Nn(R)&&m.add(R.id);const I=xn(t.value,y,!0),B=xn(n.value,m);if(e.multiSelectionActive){for(const R of y)I.push(_n(R,v));for(const R of m)B.push(_n(R,v))}I.length&&e.hooks.nodesChange.trigger(I),B.length&&e.hooks.edgesChange.trigger(B)},b=f=>{if(e.multiSelectionActive){const v=f.map(y=>_n(y.id,!0));e.hooks.nodesChange.trigger(v);return}e.hooks.nodesChange.trigger(xn(t.value,new Set(f.map(v=>v.id)),!0)),e.hooks.edgesChange.trigger(xn(n.value))},E=f=>{if(e.multiSelectionActive){const v=f.map(y=>_n(y.id,!0));e.hooks.edgesChange.trigger(v);return}e.hooks.edgesChange.trigger(xn(n.value,new Set(f.map(v=>v.id)))),e.hooks.nodesChange.trigger(xn(t.value,new Set,!0))},N=f=>{h(f,!0)},M=f=>{const y=(f||e.nodes).map(m=>(m.selected=!1,_n(m.id,!1)));e.hooks.nodesChange.trigger(y)},P=f=>{const y=(f||e.edges).map(m=>(m.selected=!1,_n(m.id,!1)));e.hooks.edgesChange.trigger(y)},g=f=>{if(!f||!f.length)return h([],!1);const v=f.reduce((y,m)=>{const I=_n(m.id,!1);return zn(m)?y.nodes.push(I):y.edges.push(I),y},{nodes:[],edges:[]});v.nodes.length&&e.hooks.nodesChange.trigger(v.nodes),v.edges.length&&e.hooks.edgesChange.trigger(v.edges)},_=f=>{var v;(v=e.d3Zoom)==null||v.scaleExtent([f,e.maxZoom]),e.minZoom=f},O=f=>{var v;(v=e.d3Zoom)==null||v.scaleExtent([e.minZoom,f]),e.maxZoom=f},U=f=>{var v;(v=e.d3Zoom)==null||v.translateExtent(f),e.translateExtent=f},X=f=>{e.nodeExtent=f,i()},H=f=>{var v;(v=e.d3Zoom)==null||v.clickDistance(f)},F=f=>{e.nodesDraggable=f,e.nodesConnectable=f,e.elementsSelectable=f},Z=f=>{const v=f instanceof Function?f(e.nodes):f;!e.initialized&&!v.length||(e.nodes=za(v,u,e.hooks.error.trigger))},j=f=>{const v=f instanceof Function?f(e.edges):f;if(!e.initialized&&!v.length)return;const y=Zs(v,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);Ws(e.connectionLookup,n.value,y),e.edges=y},C=f=>{const v=f instanceof Function?f([...e.nodes,...e.edges]):f;!e.initialized&&!v.length||(Z(v.filter(zn)),j(v.filter(Nn)))},ee=f=>{let v=f instanceof Function?f(e.nodes):f;v=Array.isArray(v)?v:[v];const y=za(v,u,e.hooks.error.trigger),m=[];for(const I of y)m.push(Aa(I));m.length&&e.hooks.nodesChange.trigger(m)},T=f=>{let v=f instanceof Function?f(e.edges):f;v=Array.isArray(v)?v:[v];const y=Zs(v,e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges),m=[];for(const I of y)m.push(Aa(I));m.length&&e.hooks.edgesChange.trigger(m)},G=(f,v=!0,y=!1)=>{const m=f instanceof Function?f(e.nodes):f,I=Array.isArray(m)?m:[m],B=[],R=[];function A(K){const ne=l(K);for(const se of ne)(!He(se.deletable)||se.deletable)&&R.push(Oa(se.id,se.source,se.target,se.sourceHandle,se.targetHandle))}function q(K){const ne=[];for(const se of e.nodes)se.parentNode===K&&ne.push(se);if(ne.length){for(const se of ne)B.push(Da(se.id));v&&A(ne);for(const se of ne)q(se.id)}}for(const K of I){const ne=typeof K=="string"?u(K):K;ne&&(He(ne.deletable)&&!ne.deletable||(B.push(Da(ne.id)),v&&A([ne]),y&&q(ne.id)))}R.length&&e.hooks.edgesChange.trigger(R),B.length&&e.hooks.nodesChange.trigger(B)},k=f=>{const v=f instanceof Function?f(e.edges):f,y=Array.isArray(v)?v:[v],m=[];for(const I of y){const B=typeof I=="string"?c(I):I;B&&(He(B.deletable)&&!B.deletable||m.push(Oa(typeof I=="string"?I:I.id,B.source,B.target,B.sourceHandle,B.targetHandle)))}e.hooks.edgesChange.trigger(m)},L=(f,v,y=!0)=>{const m=c(f.id);if(!m)return!1;const I=e.edges.indexOf(m),B=z2(f,v,m,y,e.hooks.error.trigger);if(B){const[R]=Zs([B],e.isValidConnection,u,c,e.hooks.error.trigger,e.defaultEdgeOptions,e.nodes,e.edges);return e.edges=e.edges.map((A,q)=>q===I?R:A),Ws(e.connectionLookup,n.value,[R]),R}return!1},$=(f,v,y={replace:!1})=>{const m=c(f);if(!m)return;const I=typeof v=="function"?v(m):v;m.data=y.replace?I:{...m.data,...I}},D=f=>Pa(f,e.nodes),V=f=>{const v=Pa(f,e.edges);return Ws(e.connectionLookup,n.value,v),v},Y=(f,v,y={replace:!1})=>{const m=u(f);if(!m)return;const I=typeof v=="function"?v(m):v;y.replace?e.nodes.splice(e.nodes.indexOf(m),1,I):Object.assign(m,I)},J=(f,v,y={replace:!1})=>{const m=u(f);if(!m)return;const I=typeof v=="function"?v(m):v;m.data=y.replace?I:{...m.data,...I}},ue=(f,v,y=!1)=>{y?e.connectionClickStartHandle=f:e.connectionStartHandle=f,e.connectionEndHandle=null,e.connectionStatus=null,v&&(e.connectionPosition=v)},Q=(f,v=null,y=null)=>{e.connectionStartHandle&&(e.connectionPosition=f,e.connectionEndHandle=v,e.connectionStatus=y)},ie=(f,v)=>{e.connectionPosition={x:Number.NaN,y:Number.NaN},e.connectionEndHandle=null,e.connectionStatus=null,v?e.connectionClickStartHandle=null:e.connectionStartHandle=null},le=f=>{const v=v2(f),y=v?null:Co(f)?f:u(f.id);return!v&&!y?[null,null,v]:[v?f:Wi(y),y,v]},me=(f,v=!0,y=e.nodes)=>{const[m,I,B]=le(f);if(!m)return[];const R=[];for(const A of y||e.nodes){if(!B&&(A.id===I.id||!A.computedPosition))continue;const q=Wi(A),K=Zi(q,m);(v&&K>0||K>=Number(m.width)*Number(m.height))&&R.push(A)}return R},be=(f,v,y=!0)=>{const[m]=le(f);if(!m)return!1;const I=Zi(m,v);return y&&I>0||I>=Number(m.width)*Number(m.height)},fe=f=>{const{viewport:v,dimensions:y,d3Zoom:m,d3Selection:I,translateExtent:B}=e;if(!m||!I||!f.x&&!f.y)return!1;const R=fo.translate(v.x+f.x,v.y+f.y).scale(v.zoom),A=[[0,0],[y.width,y.height]],q=m.constrain()(R,A,B),K=e.viewport.x!==q.x||e.viewport.y!==q.y||e.viewport.zoom!==q.k;return m.transform(I,q),K},we=f=>{const v=f instanceof Function?f(e):f,y=["d3Zoom","d3Selection","d3ZoomHandler","viewportRef","vueFlowRef","dimensions","hooks"];He(v.defaultEdgeOptions)&&(e.defaultEdgeOptions=v.defaultEdgeOptions);const m=v.modelValue||v.nodes||v.edges?[]:void 0;m&&(v.modelValue&&m.push(...v.modelValue),v.nodes&&m.push(...v.nodes),v.edges&&m.push(...v.edges),C(m));const I=()=>{He(v.maxZoom)&&O(v.maxZoom),He(v.minZoom)&&_(v.minZoom),He(v.translateExtent)&&U(v.translateExtent)};for(const B of Object.keys(v)){const R=B,A=v[R];![...n_,...y].includes(R)&&He(A)&&(e[R]=A)}mr(()=>e.d3Zoom).not.toBeNull().then(I),e.initialized||(e.initialized=!0)};return{updateNodePositions:d,updateNodeDimensions:p,setElements:C,setNodes:Z,setEdges:j,addNodes:ee,addEdges:T,removeNodes:G,removeEdges:k,findNode:u,findEdge:c,updateEdge:L,updateEdgeData:$,updateNode:Y,updateNodeData:J,applyEdgeChanges:V,applyNodeChanges:D,addSelectedElements:N,addSelectedNodes:b,addSelectedEdges:E,setMinZoom:_,setMaxZoom:O,setTranslateExtent:U,setNodeExtent:X,setPaneClickDistance:H,removeSelectedElements:g,removeSelectedNodes:M,removeSelectedEdges:P,startConnection:ue,updateConnection:Q,endConnection:ie,setInteractive:F,setState:we,getIntersectingNodes:me,getIncomers:s,getOutgoers:r,getConnectedEdges:l,getHandleConnections:a,isNodeIntersecting:be,panBy:fe,fitView:f=>o.value.fitView(f),zoomIn:f=>o.value.zoomIn(f),zoomOut:f=>o.value.zoomOut(f),zoomTo:(f,v)=>o.value.zoomTo(f,v),setViewport:(f,v)=>o.value.setViewport(f,v),setTransform:(f,v)=>o.value.setTransform(f,v),getViewport:()=>o.value.getViewport(),getTransform:()=>o.value.getTransform(),setCenter:(f,v,y)=>o.value.setCenter(f,v,y),fitBounds:(f,v)=>o.value.fitBounds(f,v),project:f=>o.value.project(f),screenToFlowCoordinate:f=>o.value.screenToFlowCoordinate(f),flowToScreenCoordinate:f=>o.value.flowToScreenCoordinate(f),toObject:()=>{const f=[],v=[];for(const y of e.nodes){const{computedPosition:m,handleBounds:I,selected:B,dimensions:R,isParent:A,resizing:q,dragging:K,events:ne,...se}=y;f.push(se)}for(const y of e.edges){const{selected:m,sourceNode:I,targetNode:B,events:R,...A}=y;v.push(A)}return JSON.parse(JSON.stringify({nodes:f,edges:v,position:[e.viewport.x,e.viewport.y],zoom:e.viewport.zoom,viewport:e.viewport}))},fromObject:f=>new Promise(v=>{const{nodes:y,edges:m,position:I,zoom:B,viewport:R}=f;if(y&&Z(y),m&&j(m),R?.x&&R?.y||I){const A=R?.x||I[0],q=R?.y||I[1],K=R?.zoom||B||e.viewport.zoom;return mr(()=>o.value.viewportInitialized).toBe(!0).then(()=>{o.value.setViewport({x:A,y:q,zoom:K}).then(()=>{v(!0)})})}else v(!0)}),updateNodeInternals:i,viewportHelper:o,$reset:()=>{const f=Ld();if(e.edges=[],e.nodes=[],e.d3Zoom&&e.d3Selection){const v=fo.translate(f.defaultViewport.x??0,f.defaultViewport.y??0).scale(Yn(f.defaultViewport.zoom??1,f.minZoom,f.maxZoom)),y=e.viewportRef.getBoundingClientRect(),m=[[0,0],[y.width,y.height]],I=e.d3Zoom.constrain()(v,m,f.translateExtent);e.d3Zoom.transform(e.d3Selection,I)}we(f)},$destroy:()=>{}}}const i_=["data-id","data-handleid","data-nodeid","data-handlepos"],s_={name:"Handle",compatConfig:{MODE:3}},Ji=he({...s_,props:{id:{default:null},type:{},position:{default:()=>ae.Top},isValidConnection:{type:Function},connectable:{type:[Boolean,Number,String,Function],default:void 0},connectableStart:{type:Boolean,default:!0},connectableEnd:{type:Boolean,default:!0}},setup(e,{expose:t}){const n=ih(e,["position","connectable","connectableStart","connectableEnd","id"]),o=Ve(()=>n.type??"source"),i=Ve(()=>n.isValidConnection??null),{id:s,connectionStartHandle:r,connectionClickStartHandle:l,connectionEndHandle:a,vueFlowRef:u,nodesConnectable:c,noDragClassName:d,noPanClassName:p}=Fe(),{id:h,node:b,nodeEl:E,connectedEdges:N}=Vd(),M=te(),P=Ve(()=>typeof e.connectableStart<"u"?e.connectableStart:!0),g=Ve(()=>typeof e.connectableEnd<"u"?e.connectableEnd:!0),_=Ve(()=>{var j,C,ee,T,G,k;return((j=r.value)==null?void 0:j.nodeId)===h&&((C=r.value)==null?void 0:C.id)===e.id&&((ee=r.value)==null?void 0:ee.type)===o.value||((T=a.value)==null?void 0:T.nodeId)===h&&((G=a.value)==null?void 0:G.id)===e.id&&((k=a.value)==null?void 0:k.type)===o.value}),O=Ve(()=>{var j,C,ee;return((j=l.value)==null?void 0:j.nodeId)===h&&((C=l.value)==null?void 0:C.id)===e.id&&((ee=l.value)==null?void 0:ee.type)===o.value}),{handlePointerDown:U,handleClick:X}=Rd({nodeId:h,handleId:e.id,isValidConnection:i,type:o}),H=pe(()=>typeof e.connectable=="string"&&e.connectable==="single"?!N.value.some(j=>{const C=j[`${o.value}Handle`];return j[o.value]!==h?!1:C?C===e.id:!0}):typeof e.connectable=="number"?N.value.filter(j=>{const C=j[`${o.value}Handle`];return j[o.value]!==h?!1:C?C===e.id:!0}).length{var j;if(!b.dimensions.width||!b.dimensions.height)return;const C=(j=b.handleBounds[o.value])==null?void 0:j.find(D=>D.id===e.id);if(!u.value||C)return;const ee=u.value.querySelector(".vue-flow__transformationpane");if(!E.value||!M.value||!ee||!e.id)return;const T=E.value.getBoundingClientRect(),G=M.value.getBoundingClientRect(),k=window.getComputedStyle(ee),{m22:L}=new window.DOMMatrixReadOnly(k.transform),$={id:e.id,position:e.position,x:(G.left-T.left)/L,y:(G.top-T.top)/L,type:o.value,nodeId:h,...xs(M.value)};b.handleBounds[o.value]=[...b.handleBounds[o.value]??[],$]});function F(j){const C=ll(j);H.value&&P.value&&(C&&j.button===0||!C)&&U(j)}function Z(j){!h||!l.value&&!P.value||H.value&&X(j)}return t({handleClick:X,handlePointerDown:U,onClick:Z,onPointerDown:F}),(j,C)=>(z(),W("div",{ref_key:"handle",ref:M,"data-id":`${oe(s)}-${oe(h)}-${e.id}-${o.value}`,"data-handleid":e.id,"data-nodeid":oe(h),"data-handlepos":j.position,class:ze(["vue-flow__handle",[`vue-flow__handle-${j.position}`,`vue-flow__handle-${e.id}`,oe(d),oe(p),o.value,{connectable:H.value,connecting:O.value,connectablestart:P.value,connectableend:g.value,connectionindicator:H.value&&(P.value&&!_.value||g.value&&_.value)}]]),onMousedown:F,onTouchstartPassive:F,onClick:Z},[Ct(j.$slots,"default",{id:j.id})],42,i_))}}),Ns=function({sourcePosition:e=ae.Bottom,targetPosition:t=ae.Top,label:n,connectable:o=!0,isValidTargetPos:i,isValidSourcePos:s,data:r}){const l=r.label??n;return[Ie(Ji,{type:"target",position:t,connectable:o,isValidConnection:i}),typeof l!="string"&&l?Ie(l):Ie(_e,[l]),Ie(Ji,{type:"source",position:e,connectable:o,isValidConnection:s})]};Ns.props=["sourcePosition","targetPosition","label","isValidTargetPos","isValidSourcePos","connectable","data"];Ns.inheritAttrs=!1;Ns.compatConfig={MODE:3};const r_=Ns,Ts=function({targetPosition:e=ae.Top,label:t,connectable:n=!0,isValidTargetPos:o,data:i}){const s=i.label??t;return[Ie(Ji,{type:"target",position:e,connectable:n,isValidConnection:o}),typeof s!="string"&&s?Ie(s):Ie(_e,[s])]};Ts.props=["targetPosition","label","isValidTargetPos","connectable","data"];Ts.inheritAttrs=!1;Ts.compatConfig={MODE:3};const l_=Ts,Ms=function({sourcePosition:e=ae.Bottom,label:t,connectable:n=!0,isValidSourcePos:o,data:i}){const s=i.label??t;return[typeof s!="string"&&s?Ie(s):Ie(_e,[s]),Ie(Ji,{type:"source",position:e,connectable:n,isValidConnection:o})]};Ms.props=["sourcePosition","label","isValidSourcePos","connectable","data"];Ms.inheritAttrs=!1;Ms.compatConfig={MODE:3};const a_=Ms,u_=["transform"],c_=["width","height","x","y","rx","ry"],d_=["y"],f_={name:"EdgeText",compatConfig:{MODE:3}},h_=he({...f_,props:{x:{},y:{},label:{},labelStyle:{default:()=>({})},labelShowBg:{type:Boolean,default:!0},labelBgStyle:{default:()=>({})},labelBgPadding:{default:()=>[2,4]},labelBgBorderRadius:{default:2}},setup(e){const t=te({x:0,y:0,width:0,height:0}),n=te(null),o=pe(()=>`translate(${e.x-t.value.width/2} ${e.y-t.value.height/2})`);ut(i),xe([()=>e.x,()=>e.y,n,()=>e.label],i);function i(){if(!n.value)return;const s=n.value.getBBox();(s.width!==t.value.width||s.height!==t.value.height)&&(t.value=s)}return(s,r)=>(z(),W("g",{transform:o.value,class:"vue-flow__edge-textwrapper"},[s.labelShowBg?(z(),W("rect",{key:0,class:"vue-flow__edge-textbg",width:`${t.value.width+2*s.labelBgPadding[0]}px`,height:`${t.value.height+2*s.labelBgPadding[1]}px`,x:-s.labelBgPadding[0],y:-s.labelBgPadding[1],style:at(s.labelBgStyle),rx:s.labelBgBorderRadius,ry:s.labelBgBorderRadius},null,12,c_)):Ne("",!0),x("text",Mn(s.$attrs,{ref_key:"el",ref:n,class:"vue-flow__edge-text",y:t.value.height/2,dy:"0.3em",style:s.labelStyle}),[Ct(s.$slots,"default",{},()=>[typeof s.label!="string"?(z(),Re(vo(s.label),{key:0})):(z(),W(_e,{key:1},[Be(Ae(s.label),1)],64))])],16,d_)],8,u_))}}),p_=["id","d","marker-end","marker-start"],g_=["d","stroke-width"],v_={name:"BaseEdge",inheritAttrs:!1,compatConfig:{MODE:3}},$s=he({...v_,props:{id:{},labelX:{},labelY:{},path:{},label:{},markerStart:{},markerEnd:{},interactionWidth:{default:20},labelStyle:{},labelShowBg:{type:Boolean},labelBgStyle:{},labelBgPadding:{},labelBgBorderRadius:{}},setup(e,{expose:t}){const n=te(null),o=te(null),i=te(null),s=oh();return t({pathEl:n,interactionEl:o,labelEl:i}),(r,l)=>(z(),W(_e,null,[x("path",Mn(oe(s),{id:r.id,ref_key:"pathEl",ref:n,d:r.path,class:"vue-flow__edge-path","marker-end":r.markerEnd,"marker-start":r.markerStart}),null,16,p_),r.interactionWidth?(z(),W("path",{key:0,ref_key:"interactionEl",ref:o,fill:"none",d:r.path,"stroke-width":r.interactionWidth,"stroke-opacity":0,class:"vue-flow__edge-interaction"},null,8,g_)):Ne("",!0),r.label&&r.labelX&&r.labelY?(z(),Re(h_,{key:1,ref_key:"labelEl",ref:i,x:r.labelX,y:r.labelY,label:r.label,"label-show-bg":r.labelShowBg,"label-bg-style":r.labelBgStyle,"label-bg-padding":r.labelBgPadding,"label-bg-border-radius":r.labelBgBorderRadius,"label-style":r.labelStyle},null,8,["x","y","label","label-show-bg","label-bg-style","label-bg-padding","label-bg-border-radius","label-style"])):Ne("",!0)],64))}});function Fd({sourceX:e,sourceY:t,targetX:n,targetY:o}){const i=Math.abs(n-e)/2,s=n=0?.5*e:t*25*Math.sqrt(-e)}function ja({pos:e,x1:t,y1:n,x2:o,y2:i,c:s}){let r,l;switch(e){case ae.Left:r=t-bi(t-o,s),l=n;break;case ae.Right:r=t+bi(o-t,s),l=n;break;case ae.Top:r=t,l=n-bi(n-i,s);break;case ae.Bottom:r=t,l=n+bi(i-n,s);break}return[r,l]}function Hd(e){const{sourceX:t,sourceY:n,sourcePosition:o=ae.Bottom,targetX:i,targetY:s,targetPosition:r=ae.Top,curvature:l=.25}=e,[a,u]=ja({pos:o,x1:t,y1:n,x2:i,y2:s,c:l}),[c,d]=ja({pos:r,x1:i,y1:s,x2:t,y2:n,c:l}),[p,h,b,E]=zd({sourceX:t,sourceY:n,targetX:i,targetY:s,sourceControlX:a,sourceControlY:u,targetControlX:c,targetControlY:d});return[`M${t},${n} C${a},${u} ${c},${d} ${i},${s}`,p,h,b,E]}function Ya({pos:e,x1:t,y1:n,x2:o,y2:i}){let s,r;switch(e){case ae.Left:case ae.Right:s=.5*(t+o),r=n;break;case ae.Top:case ae.Bottom:s=t,r=.5*(n+i);break}return[s,r]}function Ud(e){const{sourceX:t,sourceY:n,sourcePosition:o=ae.Bottom,targetX:i,targetY:s,targetPosition:r=ae.Top}=e,[l,a]=Ya({pos:o,x1:t,y1:n,x2:i,y2:s}),[u,c]=Ya({pos:r,x1:i,y1:s,x2:t,y2:n}),[d,p,h,b]=zd({sourceX:t,sourceY:n,targetX:i,targetY:s,sourceControlX:l,sourceControlY:a,targetControlX:u,targetControlY:c});return[`M${t},${n} C${l},${a} ${u},${c} ${i},${s}`,d,p,h,b]}const Ka={[ae.Left]:{x:-1,y:0},[ae.Right]:{x:1,y:0},[ae.Top]:{x:0,y:-1},[ae.Bottom]:{x:0,y:1}};function m_({source:e,sourcePosition:t=ae.Bottom,target:n}){return t===ae.Left||t===ae.Right?e.xe[d]?-1:1)*T:M[d]=(u[d]>n[d]?-1:1)*T}}if(t!==o){const ee=d==="x"?"y":"x",T=r[d]===l[ee],G=a[ee]>u[ee],k=a[ee]=C?(b=(F.x+Z.x)/2,E=h[0].y):(b=h[0].x,E=(F.y+Z.y)/2)}return[[e,{x:a.x+N.x,y:a.y+N.y},...h,{x:u.x+M.x,y:u.y+M.y},n],b,E,_,O]}function __(e,t,n,o){const i=Math.min(Xa(e,t)/2,Xa(t,n)/2,o),{x:s,y:r}=t;if(e.x===s&&s===n.x||e.y===r&&r===n.y)return`L${s} ${r}`;if(e.y===r){const u=e.x{let _;return g>0&&g{const[n,o,i]=b_(e);return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),x_=w_,E_=he({name:"SmoothStepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","borderRadius","markerEnd","markerStart","interactionWidth","offset"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=kr({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),Gd=E_,S_=he({name:"StepEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],setup(e,{attrs:t}){return()=>Ie(Gd,{...e,...t,borderRadius:0})}}),C_=S_,N_=he({name:"BezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","curvature","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=Hd({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),T_=N_,M_=he({name:"SimpleBezierEdge",props:["sourcePosition","targetPosition","label","labelStyle","labelShowBg","labelBgStyle","labelBgPadding","labelBgBorderRadius","sourceY","sourceX","targetX","targetY","markerEnd","markerStart","interactionWidth"],compatConfig:{MODE:3},setup(e,{attrs:t}){return()=>{const[n,o,i]=Ud({...e,sourcePosition:e.sourcePosition??ae.Bottom,targetPosition:e.targetPosition??ae.Top});return Ie($s,{path:n,labelX:o,labelY:i,...t,...e})}}}),$_=M_,I_={input:a_,default:r_,output:l_},k_={default:T_,straight:x_,step:C_,smoothstep:Gd,simplebezier:$_};function P_(e,t,n){const o=pe(()=>E=>t.value.get(E)),i=pe(()=>E=>n.value.get(E)),s=pe(()=>{const E={...k_,...e.edgeTypes},N=Object.keys(E);for(const M of e.edges)M.type&&!N.includes(M.type)&&(E[M.type]=M.type);return E}),r=pe(()=>{const E={...I_,...e.nodeTypes},N=Object.keys(E);for(const M of e.nodes)M.type&&!N.includes(M.type)&&(E[M.type]=M.type);return E}),l=pe(()=>e.onlyRenderVisibleElements?Nd(e.nodes,{x:0,y:0,width:e.dimensions.width,height:e.dimensions.height},e.viewport,!0):e.nodes),a=pe(()=>{if(e.onlyRenderVisibleElements){const E=[];for(const N of e.edges){const M=t.value.get(N.source),P=t.value.get(N.target);M2({sourcePos:M.computedPosition||{x:0,y:0},targetPos:P.computedPosition||{x:0,y:0},sourceWidth:M.dimensions.width,sourceHeight:M.dimensions.height,targetWidth:P.dimensions.width,targetHeight:P.dimensions.height,width:e.dimensions.width,height:e.dimensions.height,viewport:e.viewport})&&E.push(N)}return E}return e.edges}),u=pe(()=>[...l.value,...a.value]),c=pe(()=>{const E=[];for(const N of e.nodes)N.selected&&E.push(N);return E}),d=pe(()=>{const E=[];for(const N of e.edges)N.selected&&E.push(N);return E}),p=pe(()=>[...c.value,...d.value]),h=pe(()=>{const E=[];for(const N of e.nodes)N.dimensions.width&&N.dimensions.height&&N.handleBounds!==void 0&&E.push(N);return E}),b=pe(()=>l.value.length>0&&h.value.length===l.value.length);return{getNode:o,getEdge:i,getElements:u,getEdgeTypes:s,getNodeTypes:r,getEdges:a,getNodes:l,getSelectedElements:p,getSelectedNodes:c,getSelectedEdges:d,getNodesInitialized:h,areNodesInitialized:b}}class Dn{constructor(){this.currentId=0,this.flows=new Map}static getInstance(){var t;const n=(t=Xt())==null?void 0:t.appContext.app,o=n?.config.globalProperties.$vueFlowStorage??Dn.instance;return Dn.instance=o??new Dn,n&&(n.config.globalProperties.$vueFlowStorage=Dn.instance),Dn.instance}set(t,n){return this.flows.set(t,n)}get(t){return this.flows.get(t)}remove(t){return this.flows.delete(t)}create(t,n){const o=Ld(),i=go(o),s={};for(const[p,h]of Object.entries(i.hooks)){const b=`on${p.charAt(0).toUpperCase()+p.slice(1)}`;s[b]=h.on}const r={};for(const[p,h]of Object.entries(i.hooks))r[p]=h.trigger;const l=pe(()=>{const p=new Map;for(const h of i.nodes)p.set(h.id,h);return p}),a=pe(()=>{const p=new Map;for(const h of i.edges)p.set(h.id,h);return p}),u=P_(i,l,a),c=o_(i,l,a);c.setState({...i,...n});const d={...s,...u,...c,...Cm(i),nodeLookup:l,edgeLookup:a,emits:r,id:t,vueFlowVersion:"1.45.0",$destroy:()=>{this.remove(t)}};return this.set(t,d),d}getId(){return`vue-flow-${this.currentId++}`}}function Fe(e){const t=Dn.getInstance(),n=is(),o=typeof e=="object",i=o?e:{id:e},s=i.id,r=s??n?.vueFlowId;let l;if(n){const a=mt(Ga,null);typeof a<"u"&&a!==null&&(!r||a.id===r)&&(l=a)}if(l||r&&(l=t.get(r)),!l||r&&l.id!==r){const a=s??t.getId(),u=t.create(a,i);l=u,(n??os(!0)).run(()=>{xe(u.applyDefault,(d,p,h)=>{const b=N=>{u.applyNodeChanges(N)},E=N=>{u.applyEdgeChanges(N)};d?(u.onNodesChange(b),u.onEdgesChange(E)):(u.hooks.value.nodesChange.off(b),u.hooks.value.edgesChange.off(E)),h(()=>{u.hooks.value.nodesChange.off(b),u.hooks.value.edgesChange.off(E)})},{immediate:!0}),ms(()=>{if(l){const d=t.get(l.id);d?d.$destroy():Ss(`No store instance found for id ${l.id} in storage.`)}})})}else o&&l.setState(i);if(n&&(Hn(Ga,l),n.vueFlowId=l.id),o){const a=Xt();a?.type.name!=="VueFlow"&&l.emits.error(new Ge(Ue.USEVUEFLOW_OPTIONS))}return l}function A_(e){const{emits:t,dimensions:n}=Fe();let o;ut(()=>{const i=e.value,s=()=>{if(!i)return;const r=xs(i);(r.width===0||r.height===0)&&t.error(new Ge(Ue.MISSING_VIEWPORT_DIMENSIONS)),n.value={width:r.width||500,height:r.height||500}};s(),window.addEventListener("resize",s),i&&(o=new ResizeObserver(()=>s()),o.observe(i)),us(()=>{window.removeEventListener("resize",s),o&&i&&o.unobserve(i)})})}const D_={name:"UserSelection",compatConfig:{MODE:3}},O_=he({...D_,props:{userSelectionRect:{}},setup(e){return(t,n)=>(z(),W("div",{class:"vue-flow__selection vue-flow__container",style:at({width:`${t.userSelectionRect.width}px`,height:`${t.userSelectionRect.height}px`,transform:`translate(${t.userSelectionRect.x}px, ${t.userSelectionRect.y}px)`})},null,4))}}),R_=["tabIndex"],V_={name:"NodesSelection",compatConfig:{MODE:3}},B_=he({...V_,setup(e){const{emits:t,viewport:n,getSelectedNodes:o,noPanClassName:i,disableKeyboardA11y:s,userSelectionActive:r}=Fe(),l=Bd(),a=te(null),u=Od({el:a,onStart(b){t.selectionDragStart(b)},onDrag(b){t.selectionDrag(b)},onStop(b){t.selectionDragStop(b)}});ut(()=>{var b;s.value||(b=a.value)==null||b.focus({preventScroll:!0})});const c=pe(()=>Cd(o.value)),d=pe(()=>({width:`${c.value.width}px`,height:`${c.value.height}px`,top:`${c.value.y}px`,left:`${c.value.x}px`}));function p(b){t.selectionContextMenu({event:b,nodes:o.value})}function h(b){s||so[b.key]&&(b.preventDefault(),l({x:so[b.key].x,y:so[b.key].y},b.shiftKey))}return(b,E)=>!oe(r)&&c.value.width&&c.value.height?(z(),W("div",{key:0,class:ze(["vue-flow__nodesselection vue-flow__container",oe(i)]),style:at({transform:`translate(${oe(n).x}px,${oe(n).y}px) scale(${oe(n).zoom})`})},[x("div",{ref_key:"el",ref:a,class:ze([{dragging:oe(u)},"vue-flow__nodesselection-rect"]),style:at(d.value),tabIndex:oe(s)?void 0:-1,onContextmenu:p,onKeydown:h},null,46,R_)],6)):Ne("",!0)}});function L_(e,t){return{x:e.clientX-t.left,y:e.clientY-t.top}}const F_={name:"Pane",compatConfig:{MODE:3}},z_=he({...F_,props:{isSelecting:{type:Boolean},selectionKeyPressed:{type:Boolean}},setup(e){const{vueFlowRef:t,nodes:n,viewport:o,emits:i,userSelectionActive:s,removeSelectedElements:r,userSelectionRect:l,elementsSelectable:a,nodesSelectionActive:u,getSelectedEdges:c,getSelectedNodes:d,removeNodes:p,removeEdges:h,selectionMode:b,deleteKeyCode:E,multiSelectionKeyCode:N,multiSelectionActive:M,edgeLookup:P,nodeLookup:g,connectionLookup:_,defaultEdgeOptions:O,connectionStartHandle:U}=Fe(),X=te(null),H=te(new Set),F=te(new Set),Z=te(),j=Ve(()=>a.value&&(e.isSelecting||s.value)),C=Ve(()=>U.value!==null);let ee=!1,T=!1;const G=Bo(E,{actInsideInputWithModifier:!1}),k=Bo(N);xe(G,Q=>{Q&&(p(d.value),h(c.value),u.value=!1)}),xe(k,Q=>{M.value=Q});function L(Q,ie){return le=>{le.target===ie&&Q?.(le)}}function $(Q){if(ee||C.value){ee=!1;return}i.paneClick(Q),r(),u.value=!1}function D(Q){Q.preventDefault(),Q.stopPropagation(),i.paneContextMenu(Q)}function V(Q){i.paneScroll(Q)}function Y(Q){var ie,le,me;if(Z.value=(ie=t.value)==null?void 0:ie.getBoundingClientRect(),!a.value||!e.isSelecting||Q.button!==0||Q.target!==X.value||!Z.value)return;(me=(le=Q.target)==null?void 0:le.setPointerCapture)==null||me.call(le,Q.pointerId);const{x:be,y:fe}=L_(Q,Z.value);T=!0,ee=!1,r(),l.value={width:0,height:0,startX:be,startY:fe,x:be,y:fe},i.selectionStart(Q)}function J(Q){var ie;if(!Z.value||!l.value)return;ee=!0;const{x:le,y:me}=Bt(Q,Z.value),{startX:be=0,startY:fe=0}=l.value,we={startX:be,startY:fe,x:lef.id)),F.value=new Set;const S=((ie=O.value)==null?void 0:ie.selectable)??!0;for(const f of H.value){const v=_.value.get(f);if(v)for(const{edgeId:y}of v.values()){const m=P.value.get(y);m&&(m.selectable??S)&&F.value.add(y)}}if(!Ua(de,H.value)){const f=xn(g.value,H.value,!0);i.nodesChange(f)}if(!Ua(w,F.value)){const f=xn(P.value,F.value);i.edgesChange(f)}l.value=we,s.value=!0,u.value=!1}function ue(Q){var ie;Q.button!==0||!T||((ie=Q.target)==null||ie.releasePointerCapture(Q.pointerId),!s.value&&l.value&&Q.target===X.value&&$(Q),s.value=!1,l.value=null,u.value=H.value.size>0,i.selectionEnd(Q),e.selectionKeyPressed&&(ee=!1),T=!1)}return(Q,ie)=>(z(),W("div",{ref_key:"container",ref:X,class:ze(["vue-flow__pane vue-flow__container",{selection:Q.isSelecting}]),onClick:ie[0]||(ie[0]=le=>j.value?void 0:L($,X.value)(le)),onContextmenu:ie[1]||(ie[1]=le=>L(D,X.value)(le)),onWheelPassive:ie[2]||(ie[2]=le=>L(V,X.value)(le)),onPointerenter:ie[3]||(ie[3]=le=>j.value?void 0:oe(i).paneMouseEnter(le)),onPointerdown:ie[4]||(ie[4]=le=>j.value?Y(le):oe(i).paneMouseMove(le)),onPointermove:ie[5]||(ie[5]=le=>j.value?J(le):oe(i).paneMouseMove(le)),onPointerup:ie[6]||(ie[6]=le=>j.value?ue(le):void 0),onPointerleave:ie[7]||(ie[7]=le=>oe(i).paneMouseLeave(le))},[Ct(Q.$slots,"default"),oe(s)&&oe(l)?(z(),Re(O_,{key:0,"user-selection-rect":oe(l)},null,8,["user-selection-rect"])):Ne("",!0),oe(u)&&oe(d).length?(z(),Re(B_,{key:1})):Ne("",!0)],34))}}),H_={name:"Transform",compatConfig:{MODE:3}},U_=he({...H_,setup(e){const{viewport:t,fitViewOnInit:n,fitViewOnInitDone:o}=Fe(),i=pe(()=>n.value?!o.value:!1),s=pe(()=>`translate(${t.value.x}px,${t.value.y}px) scale(${t.value.zoom})`);return(r,l)=>(z(),W("div",{class:"vue-flow__transformationpane vue-flow__container",style:at({transform:s.value,opacity:i.value?0:void 0})},[Ct(r.$slots,"default")],4))}}),G_={name:"Viewport",compatConfig:{MODE:3}},j_=he({...G_,setup(e){const{minZoom:t,maxZoom:n,defaultViewport:o,translateExtent:i,zoomActivationKeyCode:s,selectionKeyCode:r,panActivationKeyCode:l,panOnScroll:a,panOnScrollMode:u,panOnScrollSpeed:c,panOnDrag:d,zoomOnDoubleClick:p,zoomOnPinch:h,zoomOnScroll:b,preventScrolling:E,noWheelClassName:N,noPanClassName:M,emits:P,connectionStartHandle:g,userSelectionActive:_,paneDragging:O,d3Zoom:U,d3Selection:X,d3ZoomHandler:H,viewport:F,viewportRef:Z,paneClickDistance:j}=Fe();A_(Z);const C=zo(!1),ee=zo(!1);let T=null,G=!1,k=0,L={x:0,y:0,zoom:0};const $=Bo(l),D=Bo(r),V=Bo(s),Y=Ve(()=>(!D.value||D.value&&r.value===!0)&&($.value||d.value)),J=Ve(()=>$.value||a.value),ue=Ve(()=>D.value||r.value===!0&&Y.value!==!0);ut(()=>{if(!Z.value){Ss("Viewport element is missing");return}const fe=Z.value,we=fe.getBoundingClientRect(),de=u2().clickDistance(j.value).scaleExtent([t.value,n.value]).translateExtent(i.value),w=wt(fe).call(de),S=w.on("wheel.zoom"),f=fo.translate(o.value.x??0,o.value.y??0).scale(Yn(o.value.zoom??1,t.value,n.value)),v=[[0,0],[we.width,we.height]],y=de.constrain()(f,v,i.value);de.transform(w,y),de.wheelDelta(ie),U.value=de,X.value=w,H.value=S,F.value={x:y.x,y:y.y,zoom:y.k},de.on("start",m=>{var I;if(!m.sourceEvent)return null;k=m.sourceEvent.button,C.value=!0;const B=me(m.transform);((I=m.sourceEvent)==null?void 0:I.type)==="mousedown"&&(O.value=!0),L=B,P.viewportChangeStart(B),P.moveStart({event:m,flowTransform:B})}),de.on("end",m=>{if(!m.sourceEvent)return null;if(C.value=!1,O.value=!1,Q(Y.value,k??0)&&!G&&P.paneContextMenu(m.sourceEvent),G=!1,le(L,m.transform)){const I=me(m.transform);L=I,P.viewportChangeEnd(I),P.moveEnd({event:m,flowTransform:I})}}),de.filter(m=>{var I;const B=V.value||b.value,R=h.value&&m.ctrlKey,A=m.button;if(A===1&&m.type==="mousedown"&&(be(m,"vue-flow__node")||be(m,"vue-flow__edge")))return!0;if(!Y.value&&!B&&!J.value&&!p.value&&!h.value||_.value||!p.value&&m.type==="dblclick"||be(m,N.value)&&m.type==="wheel"||be(m,M.value)&&(m.type!=="wheel"||J.value&&m.type==="wheel"&&!V.value)||!h.value&&m.ctrlKey&&m.type==="wheel"||!B&&!J.value&&!R&&m.type==="wheel")return!1;if(!h&&m.type==="touchstart"&&((I=m.touches)==null?void 0:I.length)>1)return m.preventDefault(),!1;if(!Y.value&&(m.type==="mousedown"||m.type==="touchstart")||r.value===!0&&Array.isArray(d.value)&&d.value.includes(0)&&A===0||Array.isArray(d.value)&&!d.value.includes(A)&&(m.type==="mousedown"||m.type==="touchstart"))return!1;const q=Array.isArray(d.value)&&d.value.includes(A)||r.value===!0&&Array.isArray(d.value)&&!d.value.includes(0)||!A||A<=1;return(!m.ctrlKey||$.value||m.type==="wheel")&&q}),xe([_,Y],()=>{_.value&&!C.value?de.on("zoom",null):_.value||de.on("zoom",m=>{F.value={x:m.transform.x,y:m.transform.y,zoom:m.transform.k};const I=me(m.transform);G=Q(Y.value,k??0),P.viewportChange(I),P.move({event:m,flowTransform:I})})},{immediate:!0}),xe([_,J,u,V,h,E,N],()=>{J.value&&!V.value&&!_.value?w.on("wheel.zoom",m=>{if(be(m,N.value))return!1;const I=V.value||b.value,B=h.value&&m.ctrlKey;if(!(!E.value||J.value||I||B))return!1;m.preventDefault(),m.stopImmediatePropagation();const A=w.property("__zoom").k||1,q=qi();if(!$.value&&m.ctrlKey&&h.value&&q){const Ce=Ot(m),Te=ie(m),qe=A*2**Te;de.scaleTo(w,qe,Ce,m);return}const K=m.deltaMode===1?20:1;let ne=u.value===Vo.Vertical?0:m.deltaX*K,se=u.value===Vo.Horizontal?0:m.deltaY*K;!q&&m.shiftKey&&u.value!==Vo.Vertical&&!ne&&se&&(ne=se,se=0),de.translateBy(w,-(ne/A)*c.value,-(se/A)*c.value);const ge=me(w.property("__zoom"));T&&clearTimeout(T),ee.value?(P.move({event:m,flowTransform:ge}),P.viewportChange(ge),T=setTimeout(()=>{P.moveEnd({event:m,flowTransform:ge}),P.viewportChangeEnd(ge),ee.value=!1},150)):(ee.value=!0,P.moveStart({event:m,flowTransform:ge}),P.viewportChangeStart(ge))},{passive:!1}):typeof S<"u"&&w.on("wheel.zoom",function(m,I){const B=!E.value&&m.type==="wheel"&&!m.ctrlKey,R=V.value||b.value,A=h.value&&m.ctrlKey;if(!R&&!a.value&&!A&&m.type==="wheel"||B||be(m,N.value))return null;m.preventDefault(),S.call(this,m,I)},{passive:!1})},{immediate:!0})});function Q(fe,we){return we===2&&Array.isArray(fe)&&fe.includes(2)}function ie(fe){const we=fe.ctrlKey&&qi()?10:1;return-fe.deltaY*(fe.deltaMode===1?.05:fe.deltaMode?1:.002)*we}function le(fe,we){return fe.x!==we.x&&!Number.isNaN(we.x)||fe.y!==we.y&&!Number.isNaN(we.y)||fe.zoom!==we.k&&!Number.isNaN(we.k)}function me(fe){return{x:fe.x,y:fe.y,zoom:fe.k}}function be(fe,we){return fe.target.closest(`.${we}`)}return(fe,we)=>(z(),W("div",{ref_key:"viewportRef",ref:Z,class:"vue-flow__viewport vue-flow__container"},[Me(z_,{"is-selecting":ue.value,"selection-key-pressed":oe(D),class:ze({connecting:!!oe(g),dragging:oe(O),draggable:oe(d)===!0||Array.isArray(oe(d))&&oe(d).includes(0)})},{default:Ut(()=>[Me(U_,null,{default:Ut(()=>[Ct(fe.$slots,"default")]),_:3})]),_:3},8,["is-selecting","selection-key-pressed","class"])],512))}}),Y_=["id"],K_=["id"],X_=["id"],W_={name:"A11yDescriptions",compatConfig:{MODE:3}},Z_=he({...W_,setup(e){const{id:t,disableKeyboardA11y:n,ariaLiveMessage:o}=Fe();return(i,s)=>(z(),W(_e,null,[x("div",{id:`${oe(md)}-${oe(t)}`,style:{display:"none"}}," Press enter or space to select a node. "+Ae(oe(n)?"":"You can then use the arrow keys to move the node around.")+" You can then use the arrow keys to move the node around, press delete to remove it and press escape to cancel. ",9,Y_),x("div",{id:`${oe(yd)}-${oe(t)}`,style:{display:"none"}}," Press enter or space to select an edge. You can then press delete to remove it or press escape to cancel. ",8,K_),oe(n)?Ne("",!0):(z(),W("div",{key:0,id:`${oe(g2)}-${oe(t)}`,"aria-live":"assertive","aria-atomic":"true",style:{position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)","clip-path":"inset(100%)"}},Ae(oe(o)),9,X_))],64))}});function q_(){const e=Fe();xe(()=>e.viewportHelper.value.viewportInitialized,t=>{t&&setTimeout(()=>{e.emits.init(e),e.emits.paneReady(e)},1)})}function J_(e,t,n){return n===ae.Left?e-t:n===ae.Right?e+t:e}function Q_(e,t,n){return n===ae.Top?e-t:n===ae.Bottom?e+t:e}const al=function({radius:e=10,centerX:t=0,centerY:n=0,position:o=ae.Top,type:i}){return Ie("circle",{class:`vue-flow__edgeupdater vue-flow__edgeupdater-${i}`,cx:J_(t,e,o),cy:Q_(n,e,o),r:e,stroke:"transparent",fill:"transparent"})};al.props=["radius","centerX","centerY","position","type"];al.compatConfig={MODE:3};const Wa=al,e4=he({name:"Edge",compatConfig:{MODE:3},props:["id"],setup(e){const{id:t,addSelectedEdges:n,connectionMode:o,edgeUpdaterRadius:i,emits:s,nodesSelectionActive:r,noPanClassName:l,getEdgeTypes:a,removeSelectedEdges:u,findEdge:c,findNode:d,isValidConnection:p,multiSelectionActive:h,disableKeyboardA11y:b,elementsSelectable:E,edgesUpdatable:N,edgesFocusable:M,hooks:P}=Fe(),g=pe(()=>c(e.id)),{emit:_,on:O}=j2(g.value,s),U=mt(Cs),X=Xt(),H=te(!1),F=te(!1),Z=te(""),j=te(null),C=te("source"),ee=te(null),T=Ve(()=>typeof g.value.selectable>"u"?E.value:g.value.selectable),G=Ve(()=>typeof g.value.updatable>"u"?N.value:g.value.updatable),k=Ve(()=>typeof g.value.focusable>"u"?M.value:g.value.focusable);Hn(H2,e.id),Hn(U2,ee);const L=pe(()=>g.value.class instanceof Function?g.value.class(g.value):g.value.class),$=pe(()=>g.value.style instanceof Function?g.value.style(g.value):g.value.style),D=pe(()=>{const v=g.value.type||"default",y=U?.[`edge-${v}`];if(y)return y;let m=g.value.template??a.value[v];if(typeof m=="string"&&X){const I=Object.keys(X.appContext.components);I&&I.includes(v)&&(m=Bn(v,!1))}return m&&typeof m!="string"?m:(s.error(new Ge(Ue.EDGE_TYPE_MISSING,m)),!1)}),{handlePointerDown:V}=Rd({nodeId:Z,handleId:j,type:C,isValidConnection:p,edgeUpdaterType:C,onEdgeUpdate:ue,onEdgeUpdateEnd:Q});return()=>{const v=d(g.value.source),y=d(g.value.target),m="pathOptions"in g.value?g.value.pathOptions:{};if(!v&&!y)return s.error(new Ge(Ue.EDGE_SOURCE_TARGET_MISSING,g.value.id,g.value.source,g.value.target)),null;if(!v)return s.error(new Ge(Ue.EDGE_SOURCE_MISSING,g.value.id,g.value.source)),null;if(!y)return s.error(new Ge(Ue.EDGE_TARGET_MISSING,g.value.id,g.value.target)),null;if(!g.value||g.value.hidden||v.hidden||y.hidden)return null;let I;o.value===Cn.Strict?I=v.handleBounds.source:I=[...v.handleBounds.source||[],...v.handleBounds.target||[]];const B=Va(I,g.value.sourceHandle);let R;o.value===Cn.Strict?R=y.handleBounds.target:R=[...y.handleBounds.target||[],...y.handleBounds.source||[]];const A=Va(R,g.value.targetHandle),q=B?.position||ae.Bottom,K=A?.position||ae.Top,{x:ne,y:se}=ho(v,B,q),{x:ge,y:Ce}=ho(y,A,K);return g.value.sourceX=ne,g.value.sourceY=se,g.value.targetX=ge,g.value.targetY=Ce,Ie("g",{ref:ee,key:e.id,"data-id":e.id,class:["vue-flow__edge",`vue-flow__edge-${D.value===!1?"default":g.value.type||"default"}`,l.value,L.value,{updating:H.value,selected:g.value.selected,animated:g.value.animated,inactive:!T.value&&!P.value.edgeClick.hasListeners()}],tabIndex:k.value?0:void 0,"aria-label":g.value.ariaLabel===null?void 0:g.value.ariaLabel??`Edge from ${g.value.source} to ${g.value.target}`,"aria-describedby":k.value?`${yd}-${t}`:void 0,"aria-roledescription":"edge",role:k.value?"group":"img",...g.value.domAttributes,onClick:le,onContextmenu:me,onDblclick:be,onMouseenter:fe,onMousemove:we,onMouseleave:de,onKeyDown:k.value?f:void 0},[F.value?null:Ie(D.value===!1?a.value.default:D.value,{id:e.id,sourceNode:v,targetNode:y,source:g.value.source,target:g.value.target,type:g.value.type,updatable:G.value,selected:g.value.selected,animated:g.value.animated,label:g.value.label,labelStyle:g.value.labelStyle,labelShowBg:g.value.labelShowBg,labelBgStyle:g.value.labelBgStyle,labelBgPadding:g.value.labelBgPadding,labelBgBorderRadius:g.value.labelBgBorderRadius,data:g.value.data,events:{...g.value.events,...O},style:$.value,markerStart:`url('#${ei(g.value.markerStart,t)}')`,markerEnd:`url('#${ei(g.value.markerEnd,t)}')`,sourcePosition:q,targetPosition:K,sourceX:ne,sourceY:se,targetX:ge,targetY:Ce,sourceHandleId:g.value.sourceHandle,targetHandleId:g.value.targetHandle,interactionWidth:g.value.interactionWidth,...m}),[G.value==="source"||G.value===!0?[Ie("g",{onMousedown:w,onMouseenter:Y,onMouseout:J},Ie(Wa,{position:q,centerX:ne,centerY:se,radius:i.value,type:"source","data-type":"source"}))]:null,G.value==="target"||G.value===!0?[Ie("g",{onMousedown:S,onMouseenter:Y,onMouseout:J},Ie(Wa,{position:K,centerX:ge,centerY:Ce,radius:i.value,type:"target","data-type":"target"}))]:null]])};function Y(){H.value=!0}function J(){H.value=!1}function ue(v,y){_.update({event:v,edge:g.value,connection:y})}function Q(v){_.updateEnd({event:v,edge:g.value}),F.value=!1}function ie(v,y){v.button===0&&(F.value=!0,Z.value=y?g.value.target:g.value.source,j.value=(y?g.value.targetHandle:g.value.sourceHandle)??null,C.value=y?"target":"source",_.updateStart({event:v,edge:g.value}),V(v))}function le(v){var y;const m={event:v,edge:g.value};T.value&&(r.value=!1,g.value.selected&&h.value?(u([g.value]),(y=ee.value)==null||y.blur()):n([g.value])),_.click(m)}function me(v){_.contextMenu({event:v,edge:g.value})}function be(v){_.doubleClick({event:v,edge:g.value})}function fe(v){_.mouseEnter({event:v,edge:g.value})}function we(v){_.mouseMove({event:v,edge:g.value})}function de(v){_.mouseLeave({event:v,edge:g.value})}function w(v){ie(v,!0)}function S(v){ie(v,!1)}function f(v){var y;!b.value&&_d.includes(v.key)&&T.value&&(v.key==="Escape"?((y=ee.value)==null||y.blur(),u([c(e.id)])):n([c(e.id)]))}}}),t4=e4,n4=he({name:"ConnectionLine",compatConfig:{MODE:3},setup(){var e;const{id:t,connectionMode:n,connectionStartHandle:o,connectionEndHandle:i,connectionPosition:s,connectionLineType:r,connectionLineStyle:l,connectionLineOptions:a,connectionStatus:u,viewport:c,findNode:d}=Fe(),p=(e=mt(Cs))==null?void 0:e["connection-line"],h=pe(()=>{var P;return d((P=o.value)==null?void 0:P.nodeId)}),b=pe(()=>{var P;return d((P=i.value)==null?void 0:P.nodeId)??null}),E=pe(()=>({x:(s.value.x-c.value.x)/c.value.zoom,y:(s.value.y-c.value.y)/c.value.zoom})),N=pe(()=>a.value.markerStart?`url(#${ei(a.value.markerStart,t)})`:""),M=pe(()=>a.value.markerEnd?`url(#${ei(a.value.markerEnd,t)})`:"");return()=>{var P,g,_;if(!h.value||!o.value)return null;const O=o.value.id,U=o.value.type,X=h.value.handleBounds;let H=X?.[U]??[];if(n.value===Cn.Loose){const $=X?.[U==="source"?"target":"source"]??[];H=[...H,...$]}if(!H)return null;const F=(O?H.find($=>$.id===O):H[0])??null,Z=F?.position??ae.Top,{x:j,y:C}=ho(h.value,F,Z);let ee=null;b.value&&(n.value===Cn.Strict?ee=((P=b.value.handleBounds[U==="source"?"target":"source"])==null?void 0:P.find($=>{var D;return $.id===((D=i.value)==null?void 0:D.id)}))||null:ee=((g=[...b.value.handleBounds.source??[],...b.value.handleBounds.target??[]])==null?void 0:g.find($=>{var D;return $.id===((D=i.value)==null?void 0:D.id)}))||null);const T=((_=i.value)==null?void 0:_.position)??(Z?$r[Z]:null);if(!Z||!T)return null;const G=r.value??a.value.type??An.Bezier;let k="";const L={sourceX:j,sourceY:C,sourcePosition:Z,targetX:E.value.x,targetY:E.value.y,targetPosition:T};return G===An.Bezier?[k]=Hd(L):G===An.Step?[k]=kr({...L,borderRadius:0}):G===An.SmoothStep?[k]=kr(L):G===An.SimpleBezier?[k]=Ud(L):k=`M${j},${C} ${E.value.x},${E.value.y}`,Ie("svg",{class:"vue-flow__edges vue-flow__connectionline vue-flow__container"},Ie("g",{class:"vue-flow__connection"},p?Ie(p,{sourceX:j,sourceY:C,sourcePosition:Z,targetX:E.value.x,targetY:E.value.y,targetPosition:T,sourceNode:h.value,sourceHandle:F,targetNode:b.value,targetHandle:ee,markerEnd:M.value,markerStart:N.value,connectionStatus:u.value}):Ie("path",{d:k,class:[a.value.class,u,"vue-flow__connection-path"],style:{...l.value,...a.value.style},"marker-end":M.value,"marker-start":N.value})))}}}),o4=n4,i4=["id","markerWidth","markerHeight","markerUnits","orient"],s4={name:"MarkerType",compatConfig:{MODE:3}},r4=he({...s4,props:{id:{},type:{},color:{default:"none"},width:{default:12.5},height:{default:12.5},markerUnits:{default:"strokeWidth"},orient:{default:"auto-start-reverse"},strokeWidth:{default:1}},setup(e){return(t,n)=>(z(),W("marker",{id:t.id,class:"vue-flow__arrowhead",viewBox:"-10 -10 20 20",refX:"0",refY:"0",markerWidth:`${t.width}`,markerHeight:`${t.height}`,markerUnits:t.markerUnits,orient:t.orient},[t.type===oe(Nr).ArrowClosed?(z(),W("polyline",{key:0,style:at({stroke:t.color,fill:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",points:"-5,-4 0,0 -5,4 -5,-4"},null,4)):Ne("",!0),t.type===oe(Nr).Arrow?(z(),W("polyline",{key:1,style:at({stroke:t.color,strokeWidth:t.strokeWidth}),"stroke-linecap":"round","stroke-linejoin":"round",fill:"none",points:"-5,-4 0,0 -5,4"},null,4)):Ne("",!0)],8,i4))}}),l4={class:"vue-flow__marker vue-flow__container","aria-hidden":"true"},a4={name:"MarkerDefinitions",compatConfig:{MODE:3}},u4=he({...a4,setup(e){const{id:t,edges:n,connectionLineOptions:o,defaultMarkerColor:i}=Fe(),s=pe(()=>{const r=new Set,l=[],a=u=>{if(u){const c=ei(u,t);r.has(c)||(typeof u=="object"?l.push({...u,id:c,color:u.color||i.value}):l.push({id:c,color:i.value,type:u}),r.add(c))}};for(const u of[o.value.markerEnd,o.value.markerStart])a(u);for(const u of n.value)for(const c of[u.markerStart,u.markerEnd])a(c);return l.sort((u,c)=>u.id.localeCompare(c.id))});return(r,l)=>(z(),W("svg",l4,[x("defs",null,[(z(!0),W(_e,null,Ye(s.value,a=>(z(),Re(r4,{id:a.id,key:a.id,type:a.type,color:a.color,width:a.width,height:a.height,markerUnits:a.markerUnits,"stroke-width":a.strokeWidth,orient:a.orient},null,8,["id","type","color","width","height","markerUnits","stroke-width","orient"]))),128))])]))}}),c4={name:"Edges",compatConfig:{MODE:3}},d4=he({...c4,setup(e){const{findNode:t,getEdges:n,elevateEdgesOnSelect:o}=Fe();return(i,s)=>(z(),W(_e,null,[Me(u4),(z(!0),W(_e,null,Ye(oe(n),r=>(z(),W("svg",{key:r.id,class:"vue-flow__edges vue-flow__container",style:at({zIndex:oe($2)(r,oe(t),oe(o))})},[Me(oe(t4),{id:r.id},null,8,["id"])],4))),128)),Me(oe(o4))],64))}}),f4=he({name:"Node",compatConfig:{MODE:3},props:["id","resizeObserver"],setup(e){const{id:t,noPanClassName:n,selectNodesOnDrag:o,nodesSelectionActive:i,multiSelectionActive:s,emits:r,removeSelectedNodes:l,addSelectedNodes:a,updateNodeDimensions:u,onUpdateNodeInternals:c,getNodeTypes:d,nodeExtent:p,elevateNodesOnSelect:h,disableKeyboardA11y:b,ariaLiveMessage:E,snapToGrid:N,snapGrid:M,nodeDragThreshold:P,nodesDraggable:g,elementsSelectable:_,nodesConnectable:O,nodesFocusable:U,hooks:X}=Fe(),H=te(null);Hn(Dd,H),Hn(Ad,e.id);const F=mt(Cs),Z=Xt(),j=Bd(),{node:C,parentNode:ee}=Vd(e.id),{emit:T,on:G}=W2(C,r),k=Ve(()=>typeof C.draggable>"u"?g.value:C.draggable),L=Ve(()=>typeof C.selectable>"u"?_.value:C.selectable),$=Ve(()=>typeof C.connectable>"u"?O.value:C.connectable),D=Ve(()=>typeof C.focusable>"u"?U.value:C.focusable),V=pe(()=>L.value||k.value||X.value.nodeClick.hasListeners()||X.value.nodeDoubleClick.hasListeners()||X.value.nodeMouseEnter.hasListeners()||X.value.nodeMouseMove.hasListeners()||X.value.nodeMouseLeave.hasListeners()),Y=Ve(()=>!!C.dimensions.width&&!!C.dimensions.height),J=pe(()=>{const y=C.type||"default",m=F?.[`node-${y}`];if(m)return m;let I=C.template||d.value[y];if(typeof I=="string"&&Z){const B=Object.keys(Z.appContext.components);B&&B.includes(y)&&(I=Bn(y,!1))}return I&&typeof I!="string"?I:(r.error(new Ge(Ue.NODE_TYPE_MISSING,I)),!1)}),ue=Od({id:e.id,el:H,disabled:()=>!k.value,selectable:L,dragHandle:()=>C.dragHandle,onStart(y){T.dragStart(y)},onDrag(y){T.drag(y)},onStop(y){T.dragStop(y)},onClick(y){f(y)}}),Q=pe(()=>C.class instanceof Function?C.class(C):C.class),ie=pe(()=>{const y=(C.style instanceof Function?C.style(C):C.style)||{},m=C.width instanceof Function?C.width(C):C.width,I=C.height instanceof Function?C.height(C):C.height;return!y.width&&m&&(y.width=typeof m=="string"?m:`${m}px`),!y.height&&I&&(y.height=typeof I=="string"?I:`${I}px`),y}),le=Ve(()=>Number(C.zIndex??ie.value.zIndex??0));return c(y=>{(y.includes(e.id)||!y.length)&&be()}),ut(()=>{xe(()=>C.hidden,(y=!1,m,I)=>{!y&&H.value&&(e.resizeObserver.observe(H.value),I(()=>{H.value&&e.resizeObserver.unobserve(H.value)}))},{immediate:!0,flush:"post"})}),xe([()=>C.type,()=>C.sourcePosition,()=>C.targetPosition],()=>{ht(()=>{u([{id:e.id,nodeElement:H.value,forceUpdate:!0}])})}),xe([()=>C.position.x,()=>C.position.y,()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.x},()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.y},()=>{var y;return(y=ee.value)==null?void 0:y.computedPosition.z},le,()=>C.selected,()=>C.dimensions.height,()=>C.dimensions.width,()=>{var y;return(y=ee.value)==null?void 0:y.dimensions.height},()=>{var y;return(y=ee.value)==null?void 0:y.dimensions.width}],([y,m,I,B,R,A])=>{const q={x:y,y:m,z:A+(h.value&&C.selected?1e3:0)};typeof I<"u"&&typeof B<"u"?C.computedPosition=E2({x:I,y:B,z:R},q):C.computedPosition=q},{flush:"post",immediate:!0}),xe([()=>C.extent,p],([y,m],[I,B])=>{(y!==I||m!==B)&&me()}),C.extent==="parent"||typeof C.extent=="object"&&"range"in C.extent&&C.extent.range==="parent"?mr(()=>Y).toBe(!0).then(me):me(),()=>C.hidden?null:Ie("div",{ref:H,"data-id":C.id,class:["vue-flow__node",`vue-flow__node-${J.value===!1?"default":C.type||"default"}`,{[n.value]:k.value,dragging:ue?.value,draggable:k.value,selected:C.selected,selectable:L.value,parent:C.isParent},Q.value],style:{visibility:Y.value?"visible":"hidden",zIndex:C.computedPosition.z??le.value,transform:`translate(${C.computedPosition.x}px,${C.computedPosition.y}px)`,pointerEvents:V.value?"all":"none",...ie.value},tabIndex:D.value?0:void 0,role:D.value?"group":void 0,"aria-describedby":b.value?void 0:`${md}-${t}`,"aria-label":C.ariaLabel,"aria-roledescription":"node",...C.domAttributes,onMouseenter:fe,onMousemove:we,onMouseleave:de,onContextmenu:w,onClick:f,onDblclick:S,onKeydown:v},[Ie(J.value===!1?d.value.default:J.value,{id:C.id,type:C.type,data:C.data,events:{...C.events,...G},selected:C.selected,resizing:C.resizing,dragging:ue.value,connectable:$.value,position:C.computedPosition,dimensions:C.dimensions,isValidTargetPos:C.isValidTargetPos,isValidSourcePos:C.isValidSourcePos,parent:C.parentNode,parentNodeId:C.parentNode,zIndex:C.computedPosition.z??le.value,targetPosition:C.targetPosition,sourcePosition:C.sourcePosition,label:C.label,dragHandle:C.dragHandle,onUpdateNodeInternals:be})]);function me(){const y=C.computedPosition,{computedPosition:m,position:I}=rl(C,N.value?Es(y,M.value):y,r.error,p.value,ee.value);(C.computedPosition.x!==m.x||C.computedPosition.y!==m.y)&&(C.computedPosition={...C.computedPosition,...m}),(C.position.x!==I.x||C.position.y!==I.y)&&(C.position=I)}function be(){H.value&&u([{id:e.id,nodeElement:H.value,forceUpdate:!0}])}function fe(y){ue?.value||T.mouseEnter({event:y,node:C})}function we(y){ue?.value||T.mouseMove({event:y,node:C})}function de(y){ue?.value||T.mouseLeave({event:y,node:C})}function w(y){return T.contextMenu({event:y,node:C})}function S(y){return T.doubleClick({event:y,node:C})}function f(y){L.value&&(!o.value||!k.value||P.value>0)&&Ir(C,s.value,a,l,i,!1,H.value),T.click({event:y,node:C})}function v(y){if(!(Tr(y)||b.value))if(_d.includes(y.key)&&L.value){const m=y.key==="Escape";Ir(C,s.value,a,l,i,m,H.value)}else k.value&&C.selected&&so[y.key]&&(y.preventDefault(),E.value=`Moved selected node ${y.key.replace("Arrow","").toLowerCase()}. New position, x: ${~~C.position.x}, y: ${~~C.position.y}`,j({x:so[y.key].x,y:so[y.key].y},y.shiftKey))}}}),h4=f4;function p4(e={includeHiddenNodes:!1}){const{nodes:t}=Fe();return pe(()=>{if(t.value.length===0)return!1;for(const n of t.value)if((e.includeHiddenNodes||!n.hidden)&&(n?.handleBounds===void 0||n.dimensions.width===0||n.dimensions.height===0))return!1;return!0})}const g4={class:"vue-flow__nodes vue-flow__container"},v4={name:"Nodes",compatConfig:{MODE:3}},m4=he({...v4,setup(e){const{getNodes:t,updateNodeDimensions:n,emits:o}=Fe(),i=p4(),s=te();return xe(i,r=>{r&&ht(()=>{o.nodesInitialized(t.value)})},{immediate:!0}),ut(()=>{s.value=new ResizeObserver(r=>{const l=r.map(a=>({id:a.target.getAttribute("data-id"),nodeElement:a.target,forceUpdate:!0}));ht(()=>n(l))})}),us(()=>{var r;return(r=s.value)==null?void 0:r.disconnect()}),(r,l)=>(z(),W("div",g4,[s.value?(z(!0),W(_e,{key:0},Ye(oe(t),(a,u,c,d)=>{const p=[a.id];if(d&&d.key===a.id&&Gh(d,p))return d;const h=(z(),Re(oe(h4),{id:a.id,key:a.id,"resize-observer":s.value},null,8,["id","resize-observer"]));return h.memo=p,h},l,0),128)):Ne("",!0)]))}});function y4(){const{emits:e}=Fe();ut(()=>{if(Pd()){const t=document.querySelector(".vue-flow__pane");t&&window.getComputedStyle(t).zIndex!=="1"&&e.error(new Ge(Ue.MISSING_STYLES))}})}const _4=x("div",{class:"vue-flow__edge-labels"},null,-1),b4={name:"VueFlow",compatConfig:{MODE:3}},w4=he({...b4,props:{id:{},modelValue:{},nodes:{},edges:{},edgeTypes:{},nodeTypes:{},connectionMode:{},connectionLineType:{},connectionLineStyle:{default:void 0},connectionLineOptions:{default:void 0},connectionRadius:{},isValidConnection:{type:[Function,null],default:void 0},deleteKeyCode:{default:void 0},selectionKeyCode:{type:[Boolean,null],default:void 0},multiSelectionKeyCode:{default:void 0},zoomActivationKeyCode:{default:void 0},panActivationKeyCode:{default:void 0},snapToGrid:{type:Boolean,default:void 0},snapGrid:{},onlyRenderVisibleElements:{type:Boolean,default:void 0},edgesUpdatable:{type:[Boolean,String],default:void 0},nodesDraggable:{type:Boolean,default:void 0},nodesConnectable:{type:Boolean,default:void 0},nodeDragThreshold:{},elementsSelectable:{type:Boolean,default:void 0},selectNodesOnDrag:{type:Boolean,default:void 0},panOnDrag:{type:[Boolean,Array],default:void 0},minZoom:{},maxZoom:{},defaultViewport:{},translateExtent:{},nodeExtent:{},defaultMarkerColor:{},zoomOnScroll:{type:Boolean,default:void 0},zoomOnPinch:{type:Boolean,default:void 0},panOnScroll:{type:Boolean,default:void 0},panOnScrollSpeed:{},panOnScrollMode:{},paneClickDistance:{},zoomOnDoubleClick:{type:Boolean,default:void 0},preventScrolling:{type:Boolean,default:void 0},selectionMode:{},edgeUpdaterRadius:{},fitViewOnInit:{type:Boolean,default:void 0},connectOnClick:{type:Boolean,default:void 0},applyDefault:{type:Boolean,default:void 0},autoConnect:{type:[Boolean,Function],default:void 0},noDragClassName:{},noWheelClassName:{},noPanClassName:{},defaultEdgeOptions:{},elevateEdgesOnSelect:{type:Boolean,default:void 0},elevateNodesOnSelect:{type:Boolean,default:void 0},disableKeyboardA11y:{type:Boolean,default:void 0},edgesFocusable:{type:Boolean,default:void 0},nodesFocusable:{type:Boolean,default:void 0},autoPanOnConnect:{type:Boolean,default:void 0},autoPanOnNodeDrag:{type:Boolean,default:void 0},autoPanSpeed:{}},emits:["nodesChange","edgesChange","nodesInitialized","paneReady","init","updateNodeInternals","error","connect","connectStart","connectEnd","clickConnectStart","clickConnectEnd","moveStart","move","moveEnd","selectionDragStart","selectionDrag","selectionDragStop","selectionContextMenu","selectionStart","selectionEnd","viewportChangeStart","viewportChange","viewportChangeEnd","paneScroll","paneClick","paneContextMenu","paneMouseEnter","paneMouseMove","paneMouseLeave","edgeUpdate","edgeContextMenu","edgeMouseEnter","edgeMouseMove","edgeMouseLeave","edgeDoubleClick","edgeClick","edgeUpdateStart","edgeUpdateEnd","nodeContextMenu","nodeMouseEnter","nodeMouseMove","nodeMouseLeave","nodeDoubleClick","nodeClick","nodeDragStart","nodeDrag","nodeDragStop","miniMapNodeClick","miniMapNodeDoubleClick","miniMapNodeMouseEnter","miniMapNodeMouseMove","miniMapNodeMouseLeave","update:modelValue","update:nodes","update:edges"],setup(e,{expose:t,emit:n}){const o=e,i=nh(),s=zs(o,"modelValue",n),r=zs(o,"nodes",n),l=zs(o,"edges",n),a=Fe(o),u=Q2({modelValue:s,nodes:r,edges:l},o,a);return t_(n,a.hooks),q_(),y4(),Hn(Cs,i),jr(()=>{u()}),t(a),(c,d)=>(z(),W("div",{ref:oe(a).vueFlowRef,class:"vue-flow"},[Me(j_,null,{default:Ut(()=>[Me(d4),_4,Me(m4),Ct(c.$slots,"zoom-pane")]),_:3}),Ct(c.$slots,"default"),Me(Z_)],512))}});var sn=(e=>(e.Lines="lines",e.Dots="dots",e))(sn||{});const jd=function({dimensions:e,size:t,color:n}){return Ie("path",{stroke:n,"stroke-width":t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`})},Yd=function({radius:e,color:t}){return Ie("circle",{cx:e,cy:e,r:e,fill:t})};sn.Lines+"",sn.Dots+"";const x4={[sn.Dots]:"#81818a",[sn.Lines]:"#eee"},E4=["id","x","y","width","height","patternTransform"],S4={key:2,height:"100",width:"100"},C4=["fill"],N4=["x","y","fill"],T4={name:"Background",compatConfig:{MODE:3}},M4=he({...T4,props:{id:{},variant:{default:()=>sn.Dots},gap:{default:20},size:{default:1},lineWidth:{default:1},patternColor:{},color:{},bgColor:{},height:{default:100},width:{default:100},x:{default:0},y:{default:0},offset:{default:0}},setup(e){const{id:t,viewport:n}=Fe(),o=pe(()=>{const r=n.value.zoom,[l,a]=Array.isArray(e.gap)?e.gap:[e.gap,e.gap],u=[l*r||1,a*r||1],c=e.size*r,[d,p]=Array.isArray(e.offset)?e.offset:[e.offset,e.offset],h=[d*r||1+u[0]/2,p*r||1+u[1]/2];return{scaledGap:u,offset:h,size:c}}),i=Ve(()=>`pattern-${t}${e.id?`-${e.id}`:""}`),s=Ve(()=>e.color||e.patternColor||x4[e.variant||sn.Dots]);return(r,l)=>(z(),W("svg",{class:"vue-flow__background vue-flow__container",style:at({height:`${r.height>100?100:r.height}%`,width:`${r.width>100?100:r.width}%`})},[Ct(r.$slots,"pattern-container",{id:i.value},()=>[x("pattern",{id:i.value,x:oe(n).x%o.value.scaledGap[0],y:oe(n).y%o.value.scaledGap[1],width:o.value.scaledGap[0],height:o.value.scaledGap[1],patternTransform:`translate(-${o.value.offset[0]},-${o.value.offset[1]})`,patternUnits:"userSpaceOnUse"},[Ct(r.$slots,"pattern",{},()=>[r.variant===oe(sn).Lines?(z(),Re(oe(jd),{key:0,size:r.lineWidth,color:s.value,dimensions:o.value.scaledGap},null,8,["size","color","dimensions"])):r.variant===oe(sn).Dots?(z(),Re(oe(Yd),{key:1,color:s.value,radius:o.value.size/2},null,8,["color","radius"])):Ne("",!0),r.bgColor?(z(),W("svg",S4,[x("rect",{width:"100%",height:"100%",fill:r.bgColor},null,8,C4)])):Ne("",!0)])],8,E4)]),x("rect",{x:r.x,y:r.y,width:"100%",height:"100%",fill:`url(#${i.value})`},null,8,N4),Ct(r.$slots,"default",{id:i.value})],4))}}),$4={class:"vue-flow-container"},I4={class:"vue-flow-viewport"},k4={class:"viewport-wrapper"},P4={class:"create-wrapper"},A4={key:0,class:"floating-create-expanded"},D4={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-check",style:{height:"100%"}},O4=he({__name:"SchemaEditor",setup(e){const t=_t(),n=Wt(),o=te(""),i=te(!1),s=te(!0),r=()=>{const h=o.value.trim();if(h!==""){if(!Lc(h)){Kt(Yt.modelName);return}t.createNode(h),o.value="",i.value=!1}},l=h=>{t.deleteNode(h)},a=h=>{n.open(h,vm,{id:h})},u=h=>{n.open(h,Iv,{id:h})},c=(h,b)=>{n.open("Edit field",jv,{id:h,field:b})},d=h=>{n.open(h,dm,{id:h})},p=(h,b)=>{n.open(b.fieldName,tm,{id:h,relation:b})};return(h,b)=>(z(),W("div",$4,[x("div",I4,[x("div",k4,[x("div",{class:"toggle-grid-button",onClick:b[0]||(b[0]=E=>s.value=!s.value)},"#"),Me(oe(w4),{nodes:oe(t).nodes,"onUpdate:nodes":b[4]||(b[4]=E=>oe(t).nodes=E),edges:oe(t).edges,"onUpdate:edges":b[5]||(b[5]=E=>oe(t).edges=E),"default-viewport":{zoom:2},"max-zoom":2,"min-zoom":.1,"fit-view-on-init":!0},{"node-custom":Ut(E=>[Me(pv,Mn(E,{onDeleteNode:l,onRenameNode:a,onAddField:u,onAddRelation:d,onOpenEditFieldModal:c,onOpenEditRelationModal:p}),null,16)]),default:Ut(()=>[s.value?(z(),Re(oe(M4),{key:0,variant:"lines",size:51,gap:51})):Ne("",!0),x("div",P4,[i.value?(z(),W("div",A4,[x("button",{class:"collapse-btn",onClick:b[1]||(b[1]=E=>i.value=!1)},b[6]||(b[6]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-left size-4 rdp-nav_icon"},[x("path",{d:"m15 18-6-6 6-6"})],-1)])),ye(x("input",{class:"create-model-input",type:"text",placeholder:"Enter Model Name","onUpdate:modelValue":b[2]||(b[2]=E=>o.value=E),onKeyup:fr(r,["enter"]),maxlength:"100"},null,544),[[tt,o.value]]),x("button",{class:"create-model-btn",onClick:r},[(z(),W("svg",D4,b[7]||(b[7]=[x("path",{d:"M20 6 9 17l-5-5"},null,-1)])))])])):Ne("",!0),i.value?Ne("",!0):(z(),W("div",{key:1,class:"create-circle",onClick:b[3]||(b[3]=E=>i.value=!0)},"+"))])]),_:1},8,["nodes","edges"])])])]))}}),R4=Xe(O4,[["__scopeId","data-v-87b25a7b"]]),V4={class:"field-modal-container"},B4={class:"input-container"},L4={class:"input-group"},F4={class:"input-group"},z4=he({__name:"AddEnumValueModal",props:{enumName:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(""),s=te("auto()"),r=()=>{if(!Fc(i.value)){Kt(Yt.enumValueName);return}n.addEnumValue(t.enumName,{name:i.value,value:s.value}),o.close()};return(l,a)=>(z(),W("main",V4,[x("div",B4,[x("div",L4,[a[2]||(a[2]=x("label",{class:"field-label"},"Name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[0]||(a[0]=u=>i.value=u),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",F4,[a[3]||(a[3]=x("label",{class:"field-label"},"Value",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[1]||(a[1]=u=>s.value=u),type:"text",maxlength:"100"},null,512),[[tt,s.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:r},"Save")])]))}}),H4=Xe(z4,[["__scopeId","data-v-33da89f7"]]),U4={class:"field-modal-container"},G4={class:"input-container"},j4={class:"input-group"},Y4={class:"input-group"},K4=he({__name:"EditEnumValueModal",props:{enumName:{},enumValue:{}},setup(e){const t=e,n=_t(),o=Wt(),i=te(t.enumValue.name),s=te(t.enumValue.value),r=()=>{if(!Fc(i.value)){Kt(Yt.enumValueName);return}n.updateEnumValue(t.enumName,t.enumValue.name,{name:i.value,value:s.value}),o.close()};return(l,a)=>(z(),W("main",U4,[x("div",G4,[x("div",j4,[a[2]||(a[2]=x("label",{class:"field-label"},"Name",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[0]||(a[0]=u=>i.value=u),type:"text",maxlength:"100"},null,512),[[tt,i.value]])]),x("div",Y4,[a[3]||(a[3]=x("label",{class:"field-label"},"Value",-1)),ye(x("input",{class:"field-input","onUpdate:modelValue":a[1]||(a[1]=u=>s.value=u),type:"text",maxlength:"100"},null,512),[[tt,s.value]])])]),x("div",{class:"action-group"},[x("button",{class:"save-field-btn",onClick:r},"Save")])]))}}),X4=Xe(K4,[["__scopeId","data-v-08474887"]]),W4={class:"layout-container"},Z4={class:"enum-sidebar"},q4={class:"sidebar-header"},J4={class:"input-group"},Q4={class:"input-horizontal"},e3=["disabled"],t3={class:"enum-list"},n3=["onClick"],o3={class:"enum-name-wrapper"},i3={key:0},s3=["onKeyup"],r3={class:"enum-item-actions"},l3=["onClick"],a3={key:0},u3={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-pencil"},c3=["onClick"],d3={key:0,class:"main-content"},f3={class:"main-table"},h3={class:"name-column"},p3={class:"value-column"},g3={class:"action-column"},v3={class:"action-content"},m3=["onMouseover","onMouseleave"],y3={key:0,class:"dropdown-list"},_3=["onClick"],b3=["onClick"],w3=he({__name:"EnumEditor",setup(e){const t=_t(),n=Wt(),o=te(""),i=te(null),s=te(null),r=te(""),l=te(null),a=te(null),u=()=>{const _=i.value;_&&n.open("Add Enum Value",H4,{enumName:_.name})},c=_=>{const O=i.value;O&&n.open("Edit Enum Value",X4,{enumName:O.name,enumValue:_})},d=_=>{console.log("Delete enum value:",_)},p=_=>{i.value=_},h=()=>{const _=o.value.trim();if(_==="")return;if(!aa(_)){Kt(Yt.enumName);return}const O=t.addEnum(_);o.value="",p(O)},b=_=>{t.deleteEnum(_.name),i.value?.name===_.name&&(i.value=null)},E=_=>s.value===_.name,N=_=>{E(_)?M(_):(s.value=_.name,r.value=_.name)},M=_=>{const O=r.value.trim();O&&O!==_.name&&(aa(O)?(t.updateEnumName(_.name,O),i.value?.name===_.name&&(i.value.name=O)):Kt(Yt.enumName)),s.value=null,r.value=""},P=_=>{l.value=_},g=_=>{l.value===_&&(l.value=null)};return(_,O)=>(z(),W("div",W4,[x("div",Z4,[x("div",q4,[x("div",J4,[x("div",Q4,[ye(x("input",{id:"new-enum-name",class:"project-name",type:"text",placeholder:"Enter new enum name","onUpdate:modelValue":O[0]||(O[0]=U=>o.value=U),onKeyup:fr(h,["enter"]),maxlength:"100"},null,544),[[tt,o.value]]),x("button",{class:"confirm-btn",onClick:h,disabled:!o.value},O[3]||(O[3]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-check"},[x("path",{d:"M20 6 9 17l-5-5"})],-1)]),8,e3)])])]),x("div",t3,[(z(!0),W(_e,null,Ye(oe(t).enums,U=>(z(),W("div",{key:U.name,class:ze(["enum-item",{active:i.value?.name===U.name}]),onClick:X=>p(U)},[x("div",o3,[E(U)?ye((z(),W("input",{key:1,type:"text",class:"enum-name-edit-input","onUpdate:modelValue":O[1]||(O[1]=X=>r.value=X),onClick:O[2]||(O[2]=Do(()=>{},["stop"])),onKeyup:fr(X=>N(U),["enter"]),ref_for:!0,ref_key:"enumNameInput",ref:a,maxlength:"100"},null,40,s3)),[[tt,r.value]]):(z(),W("span",i3,Ae(U.name),1))]),x("div",r3,[x("button",{class:"edit-enum-toggle-btn",onClick:Do(X=>N(U),["stop"])},[E(U)?(z(),W("span",a3,O[4]||(O[4]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save"},[x("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),x("path",{d:"M17 21v-8H7v8"}),x("path",{d:"M7 3v4h6"})],-1)]))):(z(),W("svg",u3,O[5]||(O[5]=[x("path",{d:"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"},null,-1),x("path",{d:"m15 5 4 4"},null,-1)])))],8,l3),x("button",{class:"delete-enum-btn",onClick:Do(X=>b(U),["stop"])},"×",8,c3)])],10,n3))),128))])]),i.value?(z(),W("div",d3,[x("table",f3,[O[7]||(O[7]=x("thead",null,[x("tr",null,[x("th",{class:"name-column"},"Name"),x("th",{class:"value-column"},"Value"),x("th",{class:"action-column"},"Action")])],-1)),x("tbody",null,[(z(!0),W(_e,null,Ye(i.value.values,(U,X)=>(z(),W("tr",{key:X},[x("td",h3,Ae(U.name),1),x("td",p3,Ae(U.value),1),x("td",g3,[x("div",v3,[x("div",{class:"enum-actions",onMouseover:H=>P(X),onMouseleave:H=>g(X)},[O[6]||(O[6]=x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-ellipsis"},[x("circle",{cx:"12",cy:"12",r:"1"}),x("circle",{cx:"19",cy:"12",r:"1"}),x("circle",{cx:"5",cy:"12",r:"1"})],-1)),l.value===X?(z(),W("div",y3,[x("div",{class:"dropdown-item",onClick:H=>c(U)},"Edit",8,_3),x("div",{class:"dropdown-item",onClick:H=>d(U)},"Delete",8,b3)])):Ne("",!0)],40,m3)])])]))),128))])]),x("div",{class:"main-footer"},[x("button",{class:"add-btn",onClick:u},"Add Enum Value")])])):Ne("",!0)]))}}),x3=Xe(w3,[["__scopeId","data-v-c7d104ef"]]),E3={class:"container"},S3={class:"editor-container"},C3={class:"editor-header"},N3={class:"editor-content"},T3=he({__name:"Viewport",setup(e){const t=te("models");return(n,o)=>(z(),W("main",E3,[x("div",S3,[x("div",C3,[x("div",{class:ze(["header-section",{active:t.value==="models"}]),onClick:o[0]||(o[0]=i=>t.value="models")}," Models ",2),o[2]||(o[2]=x("div",{class:"header-divider"},null,-1)),x("div",{class:ze(["header-section",{active:t.value==="enums"}]),onClick:o[1]||(o[1]=i=>t.value="enums")}," Enums ",2)]),x("div",N3,[t.value==="models"?(z(),Re(R4,{key:0})):Ne("",!0),t.value==="enums"?(z(),Re(x3,{key:1})):Ne("",!0)])])]))}}),M3=Xe(T3,[["__scopeId","data-v-b0fef25d"]]),$3={class:"container"},I3=he({__name:"SchemaStep",setup(e){return(t,n)=>(z(),W("main",$3,[n[0]||(n[0]=x("h1",null,"Design your Schema",-1)),n[1]||(n[1]=x("br",null,null,-1)),x("div",null,[Me(M3)])]))}}),k3=Xe(I3,[["__scopeId","data-v-33ee6271"]]),P3={class:"container"},A3={class:"feature-grid"},D3=["onClick"],O3=["innerHTML"],R3={class:"feature-label"},V3=he({__name:"FeatureSelectionStep",setup(e){const t={Databases:[{key:"use_postgres",label:"PostgreSQL",icon:''}],Migrations:[{key:"use_alembic",label:"Alembic",icon:` + + `}],Authentication:[{key:"use_builtin_auth",label:"Built-in Auth",icon:` + + `}],Caching:[{key:"use_redis",label:"Redis",icon:''}],"Message Queues":[{key:"use_rabbitmq",label:"RabbitMQ",icon:' '},{key:"use_taskiq",label:"TaskIQ",icon:` + + `}],Monitoring:[{key:"use_prometheus",label:"Prometheus",icon:` + + + `}],Logging:[{key:"use_logfire",label:"Logfire",icon:` + + `}]},n=go({use_postgres:!1,use_alembic:!1,use_builtin_auth:!1,use_redis:!1,use_rabbitmq:!1,use_taskiq:!1,use_prometheus:!1,use_logfire:!1});function o(i){n[i]=!n[i]}return(i,s)=>(z(),W("main",P3,[s[0]||(s[0]=x("h1",null,"Project Features",-1)),(z(),W(_e,null,Ye(t,(r,l)=>x("section",{key:l,class:"category-section"},[x("h2",null,Ae(l),1),x("div",A3,[(z(!0),W(_e,null,Ye(r,a=>(z(),W("div",{class:ze(["feature-item",{selected:n[a.key]}]),key:a.key,onClick:u=>o(a.key)},[x("div",{class:"feature-icon",innerHTML:a.icon},null,8,O3),x("div",R3,Ae(a.label),1)],10,D3))),128))])])),64))]))}}),B3=Xe(V3,[["__scopeId","data-v-432690c7"]]),L3={class:"container"},F3=he({__name:"GenerationStep",setup(e){const t=_t();return(n,o)=>(z(),W("main",L3,[o[1]||(o[1]=x("h1",null,"Generate",-1)),x("button",{onClick:o[0]||(o[0]=(...i)=>oe(t).callGenerateEndpoint&&oe(t).callGenerateEndpoint(...i))},"GENERATE :P")]))}}),z3=Xe(F3,[["__scopeId","data-v-9243bc5e"]]),H3={class:"modal"},U3={class:"modal-header"},G3={class:"modal-title"},j3={name:"title"},Y3={class:"modal-body"},K3=he({__name:"GlobalModal",setup(e){const t=Wt(),{modalTitle:n,isOpen:o,currentComponent:i,props:s}=Op(t);function r(){t.close()}return(l,a)=>(z(),Re(Hf,{to:"body"},[oe(o)?(z(),W("div",{key:0,class:"modal-backdrop",onClick:Do(r,["self"])},[x("div",H3,[x("div",U3,[x("div",G3,[x("div",j3,Ae(oe(n)),1)]),x("div",{class:"modal-actions",onClick:r},a[0]||(a[0]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-x h-4 w-4"},[x("path",{d:"M18 6 6 18"}),x("path",{d:"m6 6 12 12"})],-1)]))]),x("div",Y3,[oe(i)?(z(),Re(vo(oe(i)),Mn({key:0},oe(s),{onClose:r}),null,16)):Ne("",!0)])])])):Ne("",!0)]))}}),X3=Xe(K3,[["__scopeId","data-v-d61e0035"]]),W3={id:"app"},Z3={class:"main"},q3={class:"content"},J3=he({__name:"App",setup(e){const t=[Xg,ev,k3,B3,z3];return(n,o)=>(z(),W(_e,null,[x("div",W3,[o[0]||(o[0]=Wr('FastAPI Forge',1)),x("main",Z3,[x("div",q3,[Me(Lg,{steps:t})])])]),Me(X3,{ref:"modalRef"},null,512)],64))}}),ul=hc(J3);ul.use($p());const Q3={position:Xo.TOP_CENTER,shareAppContext:!0,containerClassName:"container-class"};ul.use(Pg,Q3);ul.mount("#app"); diff --git a/fastapi_forge/static/assets/index-C3-dGTeK.css b/fastapi_forge/static/assets/index-C3-dGTeK.css new file mode 100644 index 0000000..2e3e2b1 --- /dev/null +++ b/fastapi_forge/static/assets/index-C3-dGTeK.css @@ -0,0 +1 @@ +body{font-family:DM Sans,sans-serif;font-optical-sizing:auto}:root{--color-primary: #5294fd;--color-secondary: #dcebfe;--color-success: #7fbc8c;--color-danger: #ff6b6b;--color-warning: #f5c26b;--color-background: #f4f4f0}.Vue-Toastification__toast{border:2px solid black;border-radius:0!important;color:#000!important;box-shadow:2px 2px!important}.Vue-Toastification__toast--success.container-class{background-color:var(--color-success)}.Vue-Toastification__toast--error.container-class{background-color:var(--color-danger)}.Vue-Toastification__toast--warning.container-class{background-color:var(--color-warning)}.Vue-Toastification__container{z-index:9999;position:fixed;padding:4px;width:600px;box-sizing:border-box;display:flex;min-height:100%;color:#fff;flex-direction:column;pointer-events:none}@media only screen and (min-width : 600px){.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:1em}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:1em;flex-direction:column-reverse}.Vue-Toastification__container.top-left,.Vue-Toastification__container.bottom-left{left:1em}.Vue-Toastification__container.top-left .Vue-Toastification__toast,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast{margin-right:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-left .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-left .Vue-Toastification__toast--rtl{margin-right:unset;margin-left:auto}}.Vue-Toastification__container.top-right,.Vue-Toastification__container.bottom-right{right:1em}.Vue-Toastification__container.top-right .Vue-Toastification__toast,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast{margin-left:auto}@supports not (-moz-appearance: none){.Vue-Toastification__container.top-right .Vue-Toastification__toast--rtl,.Vue-Toastification__container.bottom-right .Vue-Toastification__toast--rtl{margin-left:unset;margin-right:auto}}.Vue-Toastification__container.top-center,.Vue-Toastification__container.bottom-center{left:50%;margin-left:-300px}.Vue-Toastification__container.top-center .Vue-Toastification__toast,.Vue-Toastification__container.bottom-center .Vue-Toastification__toast{margin-left:auto;margin-right:auto}}@media only screen and (max-width : 600px){.Vue-Toastification__container{width:100vw;padding:0;left:0;margin:0}.Vue-Toastification__container .Vue-Toastification__toast{width:100%}.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right,.Vue-Toastification__container.top-center{top:0}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.bottom-center{bottom:0;flex-direction:column-reverse}}.Vue-Toastification__toast{display:inline-flex;position:relative;max-height:800px;min-height:64px;box-sizing:border-box;margin-bottom:1rem;padding:22px 24px;border-radius:8px;box-shadow:0 1px 10px #0000001a,0 2px 15px #0000000d;justify-content:space-between;font-family:Lato,Helvetica,Roboto,Arial,sans-serif;max-width:600px;min-width:326px;pointer-events:auto;overflow:hidden;transform:translateZ(0);direction:ltr}.Vue-Toastification__toast--rtl{direction:rtl}.Vue-Toastification__toast--default{background-color:#1976d2;color:#fff}.Vue-Toastification__toast--info{background-color:#2196f3;color:#fff}.Vue-Toastification__toast--success{background-color:#4caf50;color:#fff}.Vue-Toastification__toast--error{background-color:#ff5252;color:#fff}.Vue-Toastification__toast--warning{background-color:#ffc107;color:#fff}@media only screen and (max-width : 600px){.Vue-Toastification__toast{border-radius:0;margin-bottom:.5rem}}.Vue-Toastification__toast-body{flex:1;line-height:24px;font-size:16px;word-break:break-word;white-space:pre-wrap}.Vue-Toastification__toast-component-body{flex:1}.Vue-Toastification__toast.disable-transition{animation:none!important}.Vue-Toastification__close-button{font-weight:700;font-size:24px;line-height:24px;background:transparent;outline:none;border:none;padding:0 0 0 10px;cursor:pointer;transition:.3s ease;align-items:center;color:#fff;opacity:.3;transition:visibility 0s,opacity .2s linear}.Vue-Toastification__close-button:hover,.Vue-Toastification__close-button:focus{opacity:1}.Vue-Toastification__toast:not(:hover) .Vue-Toastification__close-button.show-on-hover{opacity:0}.Vue-Toastification__toast--rtl .Vue-Toastification__close-button{padding-left:unset;padding-right:10px}@keyframes scale-x-frames{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Vue-Toastification__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:10000;background-color:#ffffffb3;transform-origin:left;animation:scale-x-frames linear 1 forwards}.Vue-Toastification__toast--rtl .Vue-Toastification__progress-bar{right:0;left:unset;transform-origin:right}.Vue-Toastification__icon{margin:auto 18px auto 0;background:transparent;outline:none;border:none;padding:0;transition:.3s ease;align-items:center;width:20px;height:100%}.Vue-Toastification__toast--rtl .Vue-Toastification__icon{margin:auto 0 auto 18px}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceOutRight{40%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(1000px,0,0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Vue-Toastification__bounce-enter-active.top-left,.Vue-Toastification__bounce-enter-active.bottom-left{animation-name:bounceInLeft}.Vue-Toastification__bounce-enter-active.top-right,.Vue-Toastification__bounce-enter-active.bottom-right{animation-name:bounceInRight}.Vue-Toastification__bounce-enter-active.top-center{animation-name:bounceInDown}.Vue-Toastification__bounce-enter-active.bottom-center{animation-name:bounceInUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-left,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-left{animation-name:bounceOutLeft}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-right,.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-right{animation-name:bounceOutRight}.Vue-Toastification__bounce-leave-active:not(.disable-transition).top-center{animation-name:bounceOutUp}.Vue-Toastification__bounce-leave-active:not(.disable-transition).bottom-center{animation-name:bounceOutDown}.Vue-Toastification__bounce-leave-active,.Vue-Toastification__bounce-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__bounce-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes fadeOutTop{0%{transform:translateY(0);opacity:1}to{transform:translateY(-50px);opacity:0}}@keyframes fadeOutLeft{0%{transform:translate(0);opacity:1}to{transform:translate(-50px);opacity:0}}@keyframes fadeOutBottom{0%{transform:translateY(0);opacity:1}to{transform:translateY(50px);opacity:0}}@keyframes fadeOutRight{0%{transform:translate(0);opacity:1}to{transform:translate(50px);opacity:0}}@keyframes fadeInLeft{0%{transform:translate(-50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInRight{0%{transform:translate(50px);opacity:0}to{transform:translate(0);opacity:1}}@keyframes fadeInTop{0%{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fadeInBottom{0%{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}.Vue-Toastification__fade-enter-active.top-left,.Vue-Toastification__fade-enter-active.bottom-left{animation-name:fadeInLeft}.Vue-Toastification__fade-enter-active.top-right,.Vue-Toastification__fade-enter-active.bottom-right{animation-name:fadeInRight}.Vue-Toastification__fade-enter-active.top-center{animation-name:fadeInTop}.Vue-Toastification__fade-enter-active.bottom-center{animation-name:fadeInBottom}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-left,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-left{animation-name:fadeOutLeft}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-right,.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-right{animation-name:fadeOutRight}.Vue-Toastification__fade-leave-active:not(.disable-transition).top-center{animation-name:fadeOutTop}.Vue-Toastification__fade-leave-active:not(.disable-transition).bottom-center{animation-name:fadeOutBottom}.Vue-Toastification__fade-leave-active,.Vue-Toastification__fade-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__fade-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes slideInBlurredLeft{0%{transform:translate(-1000px) scaleX(2.5) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredTop{0%{transform:translateY(-1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredRight{0%{transform:translate(1000px) scaleX(2.5) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}to{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredBottom{0%{transform:translateY(1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideOutBlurredTop{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 0%;filter:blur(0);opacity:1}to{transform:translateY(-1000px) scaleY(2) scaleX(.2);transform-origin:50% 0%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredBottom{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateY(1000px) scaleY(2) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredLeft{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(-1000px) scaleX(2) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}}@keyframes slideOutBlurredRight{0%{transform:translate(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translate(1000px) scaleX(2) scaleY(.2);transform-origin:0% 50%;filter:blur(40px);opacity:0}}.Vue-Toastification__slideBlurred-enter-active.top-left,.Vue-Toastification__slideBlurred-enter-active.bottom-left{animation-name:slideInBlurredLeft}.Vue-Toastification__slideBlurred-enter-active.top-right,.Vue-Toastification__slideBlurred-enter-active.bottom-right{animation-name:slideInBlurredRight}.Vue-Toastification__slideBlurred-enter-active.top-center{animation-name:slideInBlurredTop}.Vue-Toastification__slideBlurred-enter-active.bottom-center{animation-name:slideInBlurredBottom}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-left,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-left{animation-name:slideOutBlurredLeft}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-right,.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-right{animation-name:slideOutBlurredRight}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).top-center{animation-name:slideOutBlurredTop}.Vue-Toastification__slideBlurred-leave-active:not(.disable-transition).bottom-center{animation-name:slideOutBlurredBottom}.Vue-Toastification__slideBlurred-leave-active,.Vue-Toastification__slideBlurred-enter-active{animation-duration:.75s;animation-fill-mode:both}.Vue-Toastification__slideBlurred-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}.StepWizard[data-v-9f8c12c9]{display:flex;flex-direction:column;align-items:center;height:100%}.step-indicators[data-v-9f8c12c9]{display:flex;justify-content:center;margin-bottom:1rem}.step[data-v-9f8c12c9]{caret-color:transparent;width:50px;height:50px;border-radius:50%;background-color:#d3d3d3;display:flex;align-items:center;justify-content:center;margin:0 5px;cursor:pointer;border:2px solid black;box-shadow:2px 2px #000;transition:transform .1s ease-out,box-shadow .1s}.step[data-v-9f8c12c9]:hover{background-color:#a9a9a9;box-shadow:0 0 #000;transform:translate(2px,2px)}.step.active[data-v-9f8c12c9]{background-color:var(--color-primary)}.step.completed[data-v-9f8c12c9]{background-color:var(--color-success)}.step-content[data-v-9f8c12c9]{margin-bottom:3rem}.step-actions[data-v-9f8c12c9]{display:grid;grid-template-rows:1;grid-template-columns:2;justify-content:space-between;width:10%;position:absolute;bottom:8rem}.prev-btn[data-v-9f8c12c9]{grid-column:1}.next-btn[data-v-9f8c12c9]{grid-column:2}.next-btn[data-v-9f8c12c9],.prev-btn[data-v-9f8c12c9],.finish-btn[data-v-9f8c12c9]{caret-color:transparent;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-background);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s;font-weight:700}.next-btn[data-v-9f8c12c9]:hover,.prev-btn[data-v-9f8c12c9]:hover,.finish-btn[data-v-9f8c12c9]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer}.project-name[data-v-cad93208]{width:100%;padding:.5rem;border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.project-name[data-v-cad93208]:focus,.project-name.confirmed[data-v-cad93208]{outline:none;transform:translate(2px,2px);box-shadow:0 0 #000}.project-name.confirmed[data-v-cad93208]{cursor:not-allowed}.input-group[data-v-cad93208]{display:flex;flex-direction:column;gap:.1rem;margin-bottom:1rem;width:100%}.project-name-label[data-v-cad93208]{font-weight:700;margin-bottom:.25rem}.input-horizontal[data-v-cad93208]{display:flex;align-items:center;gap:.5rem}.confirm-btn[data-v-cad93208]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-background);padding:.25rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;height:2.125rem;font-weight:700}.confirm-btn[data-v-cad93208]:hover,.confirm-btn.confirmed[data-v-cad93208]{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s;background-color:var(--color-success)}.confirm-btn.confirmed[data-v-cad93208]{transition:.1s;background-color:var(--color-success)}.confirm-btn.confirmed[data-v-cad93208]:hover{background-color:var(--color-background);transform:translate(0);box-shadow:3px 3px #000}.label-group[data-v-cad93208]{display:flex;justify-content:space-between;align-items:center}.input-error[data-v-cad93208]{border-color:#f44;background-color:#fee}.error-message[data-v-cad93208]{color:#ff4910;font-size:.8rem;margin-top:.25rem}.confirm-btn[data-v-cad93208]:disabled{opacity:.6;cursor:not-allowed;background-color:var(--color-background)}.container[data-v-cad93208],.container[data-v-9256ee53]{display:flex;flex-direction:column;align-items:center;width:100%;max-width:360px;min-width:360px}.db-grid-container[data-v-9256ee53]{width:100%;display:flex;justify-content:center}.db-grid[data-v-9256ee53]{display:grid;grid-template-columns:repeat(3,100px);gap:3rem;justify-items:center}.db-item[data-v-9256ee53]{caret-color:transparent;border:2px solid black;font-weight:700;border-radius:4px;box-shadow:3px 3px #000;padding:1rem;text-align:center;width:100px;height:100px;display:flex;align-items:center;justify-content:center;background-color:var(--color-background);transition:all .1s ease-in-out}.db-item.enabled[data-v-9256ee53]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;background-color:var(--color-success)}.db-item.enabled.confirmed[data-v-9256ee53]{transform:translate(2px,2px);box-shadow:0 0 #000;background-color:var(--color-success)}.db-item.enabled.confirmed[data-v-9256ee53]:hover{background-color:var(--color-background);transform:translate(0);box-shadow:3px 3px #000}.db-item.disabled[data-v-9256ee53]{opacity:.6;background-color:#e0e0e0;cursor:not-allowed;box-shadow:none}.db-item.disabled[data-v-9256ee53]:hover{transform:none;box-shadow:none}.custom-node[data-v-b7467be7]{border:2px solid black;border-radius:6px;width:250px;overflow:hidden;background-color:#fff}.custom-node-header[data-v-b7467be7]{display:flex;justify-content:space-between;align-items:center;border-bottom:2px solid black;width:100%;height:32px}.custom-node-title[data-v-b7467be7]{font-weight:700;background-color:var(--color-primary);width:100%;height:100%;display:flex;align-items:center;padding:0 8px}.custom-node-actions[data-v-b7467be7]{cursor:pointer;width:40px;height:100%;display:flex;align-items:center;justify-content:center;border-left:2px solid black;background-color:var(--color-primary)}.custom-node-body[data-v-b7467be7]{display:flex;flex-direction:column;cursor:pointer}.custom-node-field-row[data-v-b7467be7]{display:flex;justify-content:space-between;align-items:center;height:28px;padding:0 8px;border-bottom:1px solid #e0e0e0}.custom-node-field-row[data-v-b7467be7]:hover{background-color:#f8f8f8}.custom-node-field-row[data-v-b7467be7]:last-child{border-bottom:none}.custom-node-field-name[data-v-b7467be7]{font-weight:600;color:#343a40;white-space:nowrap;overflow:hidden}.custom-node-field-type[data-v-b7467be7]{font-style:italic;color:#6c757d;white-space:nowrap}.dropdown-list[data-v-b7467be7]{margin-left:160px;caret-color:transparent;border:2px solid black;position:absolute;width:100%;min-width:120px;max-width:140px;border-radius:5px;background:#fff;z-index:100;padding:4px;box-sizing:border-box}.dropdown-item[data-v-b7467be7]{height:35px;width:100%;display:flex;align-items:center;padding:0 5px;box-sizing:border-box;border:2px solid transparent;border-radius:5px}.dropdown-item[data-v-b7467be7]:hover{border:2px solid black;cursor:pointer}.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-textbg{fill:#fff}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{border-width:1px;border-style:solid;border-color:#bbb}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}.field-modal-container[data-v-957caa91]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-957caa91]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-957caa91]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-957caa91]{font-weight:700;margin-bottom:5px}.field-input[data-v-957caa91],.field-select[data-v-957caa91]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-957caa91]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-957caa91]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-957caa91]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-957caa91]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.field-modal-container[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-d1c2c65c]{font-weight:700;margin-bottom:5px}.field-input[data-v-d1c2c65c],.field-select[data-v-d1c2c65c]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-d1c2c65c]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-d1c2c65c]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.delete-field-btn[data-v-d1c2c65c]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-danger);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.delete-field-btn[data-v-d1c2c65c]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.save-field-btn[data-v-d1c2c65c]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-d1c2c65c]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.relation-container[data-v-de485ddf]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-de485ddf]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-de485ddf]{display:flex;flex-direction:column;gap:.15rem}.relation-label[data-v-de485ddf]{font-weight:700;margin-bottom:5px}.relation-input[data-v-de485ddf],.relation-select[data-v-de485ddf]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-de485ddf]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-de485ddf]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-relation-btn[data-v-de485ddf]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-relation-btn[data-v-de485ddf]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.delete-relation-btn[data-v-de485ddf]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-danger);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.delete-relation-btn[data-v-de485ddf]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.relation-container[data-v-074cc5ca]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-074cc5ca]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-074cc5ca]{display:flex;flex-direction:column;gap:.15rem}.relation-label[data-v-074cc5ca]{font-weight:700;margin-bottom:5px}.relation-input[data-v-074cc5ca],.relation-select[data-v-074cc5ca]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.checkbox-group[data-v-074cc5ca]{display:flex;flex-direction:column;gap:.5rem;font-weight:700}.action-group[data-v-074cc5ca]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-relation-btn[data-v-074cc5ca]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-relation-btn[data-v-074cc5ca]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.rename-node-modal[data-v-7350b5ff]{display:flex;flex-direction:column;padding:1rem}.input-container[data-v-7350b5ff],.input-group[data-v-7350b5ff]{display:flex;flex-direction:column}.field-label[data-v-7350b5ff]{font-weight:700;margin-bottom:5px}.field-input[data-v-7350b5ff]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-7350b5ff]{margin-top:.5rem;display:flex;flex-direction:column}.save-btn[data-v-7350b5ff]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-btn[data-v-7350b5ff]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.vue-flow-container[data-v-87b25a7b]{height:100%;display:flex}.vue-flow-viewport[data-v-87b25a7b]{position:relative;flex:1;display:flex}.viewport-wrapper[data-v-87b25a7b]{width:100%;height:100%}.toggle-grid-button[data-v-87b25a7b]{caret-color:transparent;position:absolute;top:10px;right:10px;background-color:var(--color-primary);color:#000;border:2px solid black;padding:3px 6px;font-weight:700;border-radius:8px;cursor:pointer;z-index:10;box-shadow:2px 2px #000}.toggle-grid-button[data-v-87b25a7b]:hover{box-shadow:0 0 #000;transform:translate(2px,2px)}.create-wrapper[data-v-87b25a7b]{position:absolute;top:10px;left:10px;display:flex;align-items:center}.create-circle[data-v-87b25a7b]{width:40px;height:40px;background-color:var(--color-primary);border:2px solid black;color:#000;border-radius:50%;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:700;z-index:10;box-shadow:2px 2px #000}.create-circle[data-v-87b25a7b]:hover{box-shadow:0 0 #000;transform:translate(2px,2px)}.floating-create-expanded[data-v-87b25a7b]{display:flex;align-items:center;background:var(--color-primary);border:2px solid black;border-radius:50px;height:40px;padding:0 10px;gap:8px;z-index:1000;margin-top:2px;margin-left:2px}.collapse-btn[data-v-87b25a7b]{display:grid;place-items:center;width:24px;height:24px;padding:0;cursor:pointer;background:none;border:none}.collapse-btn svg[data-v-87b25a7b]{width:20px;height:20px}.create-model-input[data-v-87b25a7b]{height:26px;border:2px solid black;border-radius:6px;padding:0 10px;width:160px}.create-model-btn[data-v-87b25a7b]{height:30px;border:2px solid black;border-radius:6px;cursor:pointer;font-weight:700;background-color:var(--color-secondary);margin-right:5px}.create-model-btn[data-v-87b25a7b]:hover{background-color:var(--color-success)}.field-modal-container[data-v-33da89f7]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-33da89f7]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-33da89f7]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-33da89f7]{font-weight:700;margin-bottom:5px}.field-input[data-v-33da89f7]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-33da89f7]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-33da89f7]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-33da89f7]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.field-modal-container[data-v-08474887]{display:flex;flex-direction:column;gap:1rem;padding:1rem}.input-container[data-v-08474887]{display:flex;flex-direction:column;gap:1rem}.input-group[data-v-08474887]{display:flex;flex-direction:column;gap:.15rem}.field-label[data-v-08474887]{font-weight:700;margin-bottom:5px}.field-input[data-v-08474887]{border:2px solid black;border-radius:6px;padding:.6rem;background-color:#fff}.action-group[data-v-08474887]{gap:.5rem;margin-top:2rem;display:flex;flex-direction:column}.save-field-btn[data-v-08474887]{width:100%;padding:.5rem 1rem;border:2px solid black;border-radius:4px;background-color:var(--color-success);box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.save-field-btn[data-v-08474887]:hover{cursor:pointer;transform:translate(2px,2px);box-shadow:none}.layout-container[data-v-c7d104ef]{display:flex;height:100%;min-height:0}.enum-sidebar[data-v-c7d104ef]{width:250px;border-right:2px solid black;display:flex;flex-direction:column;background-color:#fff}.enum-list[data-v-c7d104ef]{flex:1;padding:5px;overflow-y:auto}.enum-item[data-v-c7d104ef]{padding:10px 15px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;border-radius:8px;border:2px solid transparent}.enum-item.active[data-v-c7d104ef],.enum-item[data-v-c7d104ef]:hover{background-color:var(--color-primary);font-weight:700;border-color:#000}.enum-name-wrapper[data-v-c7d104ef]{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:8px}.enum-name-edit-input[data-v-c7d104ef]{width:100%;background:none;border:2px solid black;border-radius:4px;padding:2px 5px;box-sizing:border-box;background-color:#fff}.enum-item-actions[data-v-c7d104ef]{display:flex;gap:0;align-items:center}.edit-enum-toggle-btn[data-v-c7d104ef]{background:none;border:none;font-size:16px;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px}.edit-enum-toggle-btn[data-v-c7d104ef]:hover{color:var(--color-success)}.delete-enum-btn[data-v-c7d104ef]{background:none;border:none;font-size:18px;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.delete-enum-btn[data-v-c7d104ef]:hover{color:red}.main-header[data-v-c7d104ef]{height:50px;border-bottom:2px solid black;position:sticky;top:0;background-color:inherit;z-index:1;display:flex;justify-content:space-between;align-items:center;padding:0 15px}.enum-title[data-v-c7d104ef]{font-size:1.2rem;font-weight:700}.main-content[data-v-c7d104ef]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.main-table[data-v-c7d104ef]{width:100%;border-collapse:collapse;display:flex;flex-direction:column;flex:1;min-height:0}.main-table thead[data-v-c7d104ef]{display:table;width:100%;table-layout:fixed}.main-table tbody[data-v-c7d104ef]{display:block;overflow-y:auto;flex:1;width:100%}.main-table tr[data-v-c7d104ef]{display:table;width:100%;table-layout:fixed}.main-table th[data-v-c7d104ef],.main-table td[data-v-c7d104ef]{padding:16px;text-align:left;border-bottom:2px solid black}.action-column[data-v-c7d104ef]{width:20%;text-align:right!important}.action-content[data-v-c7d104ef]{margin-right:15px}.enum-actions[data-v-c7d104ef]{cursor:pointer;display:flex;justify-content:flex-end;position:relative}.dropdown-list[data-v-c7d104ef]{position:absolute;border:2px solid black;border-radius:5px;background:#fff;z-index:100;padding:4px;left:0;min-width:100px}.dropdown-item[data-v-c7d104ef]{height:35px;width:100%;display:flex;align-items:center;padding:0 5px;box-sizing:border-box;border:2px solid transparent;border-radius:5px}.dropdown-item[data-v-c7d104ef]:hover{border:2px solid black;cursor:pointer}.main-footer[data-v-c7d104ef]{height:50px;border-top:2px solid black;position:sticky;bottom:0;padding:0 15px;display:flex;align-items:center;justify-content:flex-end}.input-group[data-v-c7d104ef]{display:flex;flex-direction:column;gap:.1rem;padding:10px}.project-name-label[data-v-c7d104ef]{font-weight:700;margin-bottom:.25rem}.input-horizontal[data-v-c7d104ef]{display:flex;align-items:center;gap:.5rem}.confirm-btn[data-v-c7d104ef]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-background);padding:.25rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;height:2.125rem;font-weight:700}.confirm-btn[data-v-c7d104ef]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s;background-color:var(--color-success)}.confirm-btn[data-v-c7d104ef]:disabled{opacity:.6;cursor:not-allowed;background-color:var(--color-background)}.project-name[data-v-c7d104ef]{width:100%;padding:.5rem;border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.project-name[data-v-c7d104ef]:focus{outline:none;transform:translate(2px,2px);box-shadow:0 0 #000}.label-group[data-v-c7d104ef]{display:flex;justify-content:space-between;align-items:center}.add-btn[data-v-c7d104ef]{caret-color:transparent;border:2px solid black;border-radius:4px;background-color:var(--color-success);padding:.5rem 1rem;box-shadow:3px 3px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out;font-weight:700}.add-btn[data-v-c7d104ef]:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer;transition:.1s}.container[data-v-b0fef25d]{width:100%;height:100vh;display:flex;justify-content:center;align-items:center;background-color:#fff}.editor-container[data-v-b0fef25d]{width:1000px;height:500px;background-color:#fff;border:2px solid black;display:flex;flex-direction:column;overflow:hidden}.editor-header[data-v-b0fef25d]{height:40px;display:flex;align-items:center;background-color:var(--color-primary);width:100%;border-bottom:2px solid black;box-sizing:border-box}.header-section[data-v-b0fef25d]{flex:1;text-align:center;cursor:pointer;font-weight:700;display:flex;align-items:center;justify-content:center;height:100%;-webkit-user-select:none;user-select:none}.header-divider[data-v-b0fef25d]{width:2px;height:100%;background-color:#000}.editor-content[data-v-b0fef25d]{position:relative;flex:1;width:100%;height:calc(100% - 40px)}.container[data-v-33ee6271]{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:column}.container[data-v-432690c7]{min-width:600px;margin:0 auto;font-family:Arial,sans-serif;padding:1rem}h1[data-v-432690c7]{text-align:center;margin-bottom:2rem;font-weight:700}.category-section[data-v-432690c7]{margin-bottom:2rem}.category-section h2[data-v-432690c7]{margin-bottom:1rem;font-size:1.3rem;font-weight:700}.feature-grid[data-v-432690c7]{display:grid;grid-template-columns:repeat(3,100px);gap:2rem 2rem;justify-content:start}.feature-item[data-v-432690c7]{border:2px solid black;border-radius:4px;box-shadow:3px 3px #000;width:100px;height:100px;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer;background-color:var(--color-background, white);transition:all .1s ease-in-out;-webkit-user-select:none;user-select:none;text-align:center;padding:.5rem}.feature-item[data-v-432690c7]:hover,.feature-item.selected[data-v-432690c7]{transform:translate(2px,2px);box-shadow:none;background-color:var(--color-success, #4caf50);color:#fff}.feature-item.selected[data-v-432690c7]:hover{background-color:var(--color-background, white);color:#000;transform:translate(0);box-shadow:3px 3px #000}.feature-icon[data-v-432690c7]{margin-bottom:.25rem}.feature-label[data-v-432690c7]{font-size:.8rem;font-weight:700;line-height:1.1}.container[data-v-9243bc5e]{display:flex;flex-direction:column;align-items:center;width:100%;max-width:360px;min-width:360px}.modal-backdrop[data-v-d61e0035]{position:fixed;inset:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal[data-v-d61e0035]{border:2px solid black;border-radius:6px;overflow:hidden;background-color:#fff;max-width:350px;width:100%;margin:0 1rem;display:flex;flex-direction:column;background-color:var(--color-secondary)}.modal-header[data-v-d61e0035]{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem}.modal-title[data-v-d61e0035]{font-weight:700;flex-grow:1;display:flex;align-items:center;font-size:1rem}.modal-actions[data-v-d61e0035]{cursor:pointer;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.modal-body[data-v-d61e0035]{overflow:hidden;background-color:var(--color-secondary)}html,body{height:100%;margin:0}#app{display:flex;flex-direction:column;height:100%;background-color:var(--color-background)}.header{height:60px;position:sticky;flex-shrink:0;background-color:#fff;border-bottom:4px solid black;top:0;display:flex;align-items:center}.content{flex-grow:1;padding:1rem}.logo{display:flex;align-items:center;gap:.5rem;margin-left:1rem}.github-icon{width:20px;height:20px;border:2px solid black;border-radius:15%;padding:.25rem;box-shadow:2px 2px #000;transition:transform .1s ease-in-out,box-shadow .1s ease-in-out}.github-icon:hover{transform:translate(2px,2px);box-shadow:0 0 #000;cursor:pointer}.github-icon:visited,.github-icon:active,.github-icon:focus{color:#000} diff --git a/fastapi_forge/static/favicon.ico b/fastapi_forge/static/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/fastapi_forge/static/favicon.ico differ diff --git a/fastapi_forge/static/index.html b/fastapi_forge/static/index.html new file mode 100644 index 0000000..be1c913 --- /dev/null +++ b/fastapi_forge/static/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Vite App + + + + + + + + diff --git a/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml b/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml index 3e938e6..752d437 100644 --- a/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml +++ b/fastapi_forge/template/{{cookiecutter.project_name}}/pyproject.toml @@ -142,4 +142,4 @@ show_error_codes = true implicit_reexport = true disable_error_code = ["prop-decorator", "override", "import-untyped"] plugins = ["pydantic.mypy", {% if cookiecutter.use_postgres -%}"sqlalchemy.ext.mypy.plugin"{% endif %}] -exclude = ["migrations"] +exclude = ["migrations"] \ No newline at end of file diff --git a/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py b/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py index a1f1829..59ddb94 100644 --- a/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py +++ b/fastapi_forge/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/dependencies/auth_dependencies.py @@ -16,14 +16,15 @@ class HTTPBearer(_HTTPBearer): Returns access token as str. """ - async def __call__(self, request: Request) -> str | None: # type: ignore + async def __call__(self, request: Request) -> str | None: """Return access token.""" try: obj = await super().__call__(request) - return obj.credentials if obj else None - except HTTPException: + except HTTPException as err: msg = "Missing token." - raise exceptions.Http401(msg) + raise exceptions.Http401(msg) from err + else: + return obj.credentials if obj else None auth_scheme = HTTPBearer() diff --git a/fastapi_forge/type_info_registry.py b/fastapi_forge/type_info_registry.py index dc0fcec..f4d29c6 100644 --- a/fastapi_forge/type_info_registry.py +++ b/fastapi_forge/type_info_registry.py @@ -5,6 +5,7 @@ from pydantic.dataclasses import dataclass from fastapi_forge.enums import FieldDataTypeEnum +from fastapi_forge.logger import logger EnumName = Annotated[str, Field(...)] @@ -48,9 +49,10 @@ def __init__(self) -> None: def register(self, key: T, data_type: TypeInfo) -> None: if key in self: - raise KeyError( + logger.error( f"{self.__class__.__name__}: Key '{key}' is already registered." ) + return self._registry[key] = data_type def get(self, key: T) -> TypeInfo: diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..86c2b2c --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,9 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +end_of_line = lf +max_line_length = 80 diff --git a/frontend/.gitattributes b/frontend/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/frontend/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/frontend/.prettierrc.json b/frontend/.prettierrc.json new file mode 100644 index 0000000..08e40b6 --- /dev/null +++ b/frontend/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "singleQuote": false, + "printWidth": 100 +} diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..c92168f --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "Vue.volar", + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "esbenp.prettier-vscode" + ] +} diff --git a/fastapi_forge/frontend/__init__.py b/frontend/README.md similarity index 100% rename from fastapi_forge/frontend/__init__.py rename to frontend/README.md diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/eslint.config.ts b/frontend/eslint.config.ts new file mode 100644 index 0000000..20475f8 --- /dev/null +++ b/frontend/eslint.config.ts @@ -0,0 +1,22 @@ +import { globalIgnores } from 'eslint/config' +import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript' +import pluginVue from 'eslint-plugin-vue' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: +// import { configureVueProject } from '@vue/eslint-config-typescript' +// configureVueProject({ scriptLangs: ['ts', 'tsx'] }) +// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup + +export default defineConfigWithVueTs( + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + + globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']), + + pluginVue.configs['flat/essential'], + vueTsConfigs.recommended, + skipFormatting, +) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..1ba50ec --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Vite App + + + + + + + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..7ba709a --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5365 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@vue-flow/background": "^1.3.2", + "@vue-flow/core": "^1.45.0", + "cytoscape": "^3.32.1", + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-toastification": "^2.0.0-rc.5" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "^7.0.0", + "vite-plugin-vue-devtools": "^7.7.7", + "vue-tsc": "^2.2.10" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", + "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tsconfig/node22": { + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.2.tgz", + "integrity": "sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz", + "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", + "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.19" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-flow/background": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@vue-flow/background/-/background-1.3.2.tgz", + "integrity": "sha512-eJPhDcLj1wEo45bBoqTXw1uhl0yK2RaQGnEINqvvBsAFKh/camHJd5NPmOdS1w+M9lggc9igUewxaEd3iCQX2w==", + "license": "MIT", + "peerDependencies": { + "@vue-flow/core": "^1.23.0", + "vue": "^3.3.0" + } + }, + "node_modules/@vue-flow/core": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/@vue-flow/core/-/core-1.45.0.tgz", + "integrity": "sha512-+Qd4fTnCfrhfYQzlHyf5Jt7rNE4PlDnEJEJZH9v6hDZoTOeOy1RhS85cSxKYxdsJ31Ttj2v3yabhoVfBf+bmJA==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "^10.5.0", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.4.0.tgz", + "integrity": "sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.4.0.tgz", + "integrity": "sha512-9zAHmwgMWlaN6qRKdrg1uKsBKHvnUU+Py+MOCTuYZBoZsopa90Di10QRjB+YPnVss0BZbG/H5XFwJY1fTxJWhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "@vue/babel-helper-vue-transform-on": "1.4.0", + "@vue/babel-plugin-resolve-type": "1.4.0", + "@vue/shared": "^3.5.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.4.0.tgz", + "integrity": "sha512-4xqDRRbQQEWHQyjlYSgZsWj44KfiF6D+ktCuXyZ8EnVDYV3pztmXJDf1HveAjUAXxAnR8daCQT51RneWWxtTyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/parser": "^7.26.9", + "@vue/compiler-sfc": "^3.5.13" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", + "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/shared": "3.5.18", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", + "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", + "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@vue/compiler-core": "3.5.18", + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", + "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.7.tgz", + "integrity": "sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "mitt": "^3.0.1", + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-10.2.0.tgz", + "integrity": "sha512-GL3YBLwv/+b86yHcNNfPJxOTtVFJ4Mbc9UU3zR+KVoG7SwGTjPT+32fXamscNumElhcpXW3mT0DgzS9w32S7Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^10.0.1", + "eslint-plugin-prettier": "^5.2.2" + }, + "peerDependencies": { + "eslint": ">= 8.21.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.6.0.tgz", + "integrity": "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.35.1", + "fast-glob": "^3.3.3", + "typescript-eslint": "^8.35.1", + "vue-eslint-parser": "^10.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0", + "eslint-plugin-vue": "^9.28.0 || ^10.0.0", + "typescript": ">=4.8.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", + "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", + "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/shared": "3.5.18" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", + "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.18", + "@vue/runtime-core": "3.5.18", + "@vue/shared": "3.5.18", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", + "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "vue": "3.5.18" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", + "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", + "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/cytoscape": { + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.1.tgz", + "integrity": "sha512-dbeqFTLYEwlFg7UGtcZhCCG/2WayX72zK3Sq323CEX29CY81tYfVhw1MIdduCtpstB0cTOhJswWlM/OEB3Xp+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.190", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.190.tgz", + "integrity": "sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.31.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.3.tgz", + "integrity": "sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.2.0.tgz", + "integrity": "sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.0.tgz", + "integrity": "sha512-NWDAhdnATItTnRhip9VTd8oXDjVcbhetRN6YzckApnXGxpGUooKMAaf0KVvlZG0+KlJMGkeLElVn4M1ReuxKUQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-all2": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-8.0.4.tgz", + "integrity": "sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.6", + "memorystream": "^0.3.1", + "picomatch": "^4.0.2", + "pidtree": "^0.6.0", + "read-package-json-fast": "^4.0.0", + "shell-quote": "^1.7.3", + "which": "^5.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^20.5.0 || >=22.0.0", + "npm": ">= 10" + } + }, + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm-run-all2/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm-run-all2/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/npm-run-all2/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", + "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.7.tgz", + "integrity": "sha512-d0fIh3wRcgSlr4Vz7bAk4va1MkdqhQgj9ANE/rBhsAjOnRfTLs2ocjFMvSUOsv6SRRXU9G+VM7yMgqDb6yI4iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-core": "^7.7.7", + "@vue/devtools-kit": "^7.7.7", + "@vue/devtools-shared": "^7.7.7", + "execa": "^9.5.2", + "sirv": "^3.0.1", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-plugin-vue-devtools/node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz", + "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.18", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", + "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.18", + "@vue/compiler-sfc": "3.5.18", + "@vue/runtime-dom": "3.5.18", + "@vue/server-renderer": "3.5.18", + "@vue/shared": "3.5.18" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-toastification": { + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", + "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.2" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..97f7b8e --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,40 @@ +{ + "name": "frontend", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build", + "lint": "eslint . --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "@vue-flow/background": "^1.3.2", + "@vue-flow/core": "^1.45.0", + "cytoscape": "^3.32.1", + "pinia": "^3.0.3", + "vue": "^3.5.17", + "vue-toastification": "^2.0.0-rc.5" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.2", + "@types/node": "^22.15.32", + "@vitejs/plugin-vue": "^6.0.0", + "@vue/eslint-config-prettier": "^10.2.0", + "@vue/eslint-config-typescript": "^14.5.1", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.29.0", + "eslint-plugin-vue": "~10.2.0", + "jiti": "^2.4.2", + "npm-run-all2": "^8.0.4", + "prettier": "3.5.3", + "typescript": "~5.8.0", + "vite": "^7.0.0", + "vite-plugin-vue-devtools": "^7.7.7", + "vue-tsc": "^2.2.10" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/frontend/public/favicon.ico differ diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..a5733c9 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,107 @@ + + + + + FastAPI Forge + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css new file mode 100644 index 0000000..e5e2536 --- /dev/null +++ b/frontend/src/assets/main.css @@ -0,0 +1,32 @@ +body { + font-family: "DM Sans", sans-serif; + font-optical-sizing: auto; +} + +:root { + --color-primary: #5294fd; + --color-secondary: #dcebfe; + --color-success: #7fbc8c; + --color-danger: #ff6b6b; + --color-warning: #f5c26b; + --color-background: #f4f4f0; +} + +.Vue-Toastification__toast { + border: 2px solid black; + border-radius: 0px !important; + color: black !important; + box-shadow: 2px 2px 0px !important; +} + +.Vue-Toastification__toast--success.container-class { + background-color: var(--color-success); +} + +.Vue-Toastification__toast--error.container-class { + background-color: var(--color-danger); +} + +.Vue-Toastification__toast--warning.container-class { + background-color: var(--color-warning); +} diff --git a/frontend/src/components/StepWizard.vue b/frontend/src/components/StepWizard.vue new file mode 100644 index 0000000..61b73eb --- /dev/null +++ b/frontend/src/components/StepWizard.vue @@ -0,0 +1,141 @@ + + + + + + + + + + + + Previous + + Next + + + + + + + + diff --git a/frontend/src/components/ValidatedInput.vue b/frontend/src/components/ValidatedInput.vue new file mode 100644 index 0000000..7ad03d6 --- /dev/null +++ b/frontend/src/components/ValidatedInput.vue @@ -0,0 +1,90 @@ + + + {{ label }} + + + + {{ error }} + + + + + + diff --git a/frontend/src/components/modal/AddEnumValueModal.vue b/frontend/src/components/modal/AddEnumValueModal.vue new file mode 100644 index 0000000..f340cfe --- /dev/null +++ b/frontend/src/components/modal/AddEnumValueModal.vue @@ -0,0 +1,107 @@ + + + + + Name + + + + + Value + + + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/AddFieldModal.vue b/frontend/src/components/modal/AddFieldModal.vue new file mode 100644 index 0000000..ce6aec5 --- /dev/null +++ b/frontend/src/components/modal/AddFieldModal.vue @@ -0,0 +1,224 @@ + + + + + Field name + + + + + Type + + -- Select type -- + String + Int + UUID + DateTime + Boolean + Float + Enum + + + + + Select Enum + + -- Select Enum -- + + {{ e.name }} + + + + + + Default value + + + + {{ v.name }} + + + + + + + + Primary key + Nullable + Unique + Index + + + + Timestamp + Created + Updated + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/AddRelationModal.vue b/frontend/src/components/modal/AddRelationModal.vue new file mode 100644 index 0000000..0263e73 --- /dev/null +++ b/frontend/src/components/modal/AddRelationModal.vue @@ -0,0 +1,154 @@ + + + + + Field name + + + + + Target model + + -- Select a model -- + + {{ node.id }} + + + + + + OnDelete + + -- Select behavior -- + CASCADE + SET_NULL + + + + + Back populates + + + + + + Nullable + Unique + Index + + + + Save + + + + + + + diff --git a/frontend/src/components/modal/EditEnumValueModal.vue b/frontend/src/components/modal/EditEnumValueModal.vue new file mode 100644 index 0000000..ebf42f3 --- /dev/null +++ b/frontend/src/components/modal/EditEnumValueModal.vue @@ -0,0 +1,111 @@ + + + + + Name + + + + + Value + + + + + + Save + + + + + + + + +function showDangerToast(modelName: any) { throw new Error("Function not implemented."); } diff --git a/frontend/src/components/modal/EditFieldModal.vue b/frontend/src/components/modal/EditFieldModal.vue new file mode 100644 index 0000000..ed4fab2 --- /dev/null +++ b/frontend/src/components/modal/EditFieldModal.vue @@ -0,0 +1,269 @@ + + + + + Field name + + + + + Type + + -- Select type -- + String + Int + UUID + DateTime + Boolean + Float + Enum + + + + + Select Enum + + -- Select Enum -- + + {{ e.name }} + + + + + + Default value + + + + {{ v.name }} + + + + + + + + Primary key + Nullable + Unique + Index + + + + Timestamp + Created + Updated + + + + Save + Delete + + + + + + + diff --git a/frontend/src/components/modal/EditRelationModal.vue b/frontend/src/components/modal/EditRelationModal.vue new file mode 100644 index 0000000..7a3adfa --- /dev/null +++ b/frontend/src/components/modal/EditRelationModal.vue @@ -0,0 +1,192 @@ + + + + + Field name + + + + + Target model + + -- Select a model -- + + {{ node.id }} + + + + + + OnDelete + + -- Select behavior -- + CASCADE + SET_NULL + + + + + Back populates + + + + + + Nullable + Unique + Index + + + + Delete + Save + + + + + + + diff --git a/frontend/src/components/modal/GlobalModal.vue b/frontend/src/components/modal/GlobalModal.vue new file mode 100644 index 0000000..f7eec03 --- /dev/null +++ b/frontend/src/components/modal/GlobalModal.vue @@ -0,0 +1,102 @@ + + + + + + + {{ modalTitle }} + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/modal/RenameNodeModal.vue b/frontend/src/components/modal/RenameNodeModal.vue new file mode 100644 index 0000000..2c68551 --- /dev/null +++ b/frontend/src/components/modal/RenameNodeModal.vue @@ -0,0 +1,100 @@ + + + + + New model name + + + + + + Rename + + + + + + + diff --git a/frontend/src/components/schema_editor/CustomNode.vue b/frontend/src/components/schema_editor/CustomNode.vue new file mode 100644 index 0000000..c04a937 --- /dev/null +++ b/frontend/src/components/schema_editor/CustomNode.vue @@ -0,0 +1,181 @@ + + + + + {{ id }} + + + + + + + + + Add Field + Add Relation + Rename + Delete + + + + + + {{ field.name }} + {{ field.type }} + {{ field.type }}({{ field.typeEnum }}) + + + {{ relation.fieldName }} + {{ relation.targetModel }} + + + + + + + + diff --git a/frontend/src/components/schema_editor/EnumEditor.vue b/frontend/src/components/schema_editor/EnumEditor.vue new file mode 100644 index 0000000..f1f6180 --- /dev/null +++ b/frontend/src/components/schema_editor/EnumEditor.vue @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + {{ enumItem.name }} + + + + + + + + + + + + + + + + + × + + + + + + + + + Name + Value + Action + + + + + {{ ev.name }} + {{ ev.value }} + + + + + + + + + + Edit + Delete + + + + + + + + + + + + + + + diff --git a/frontend/src/components/schema_editor/SchemaEditor.vue b/frontend/src/components/schema_editor/SchemaEditor.vue new file mode 100644 index 0000000..f0d22b9 --- /dev/null +++ b/frontend/src/components/schema_editor/SchemaEditor.vue @@ -0,0 +1,260 @@ + + + + + # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/schema_editor/Viewport.vue b/frontend/src/components/schema_editor/Viewport.vue new file mode 100644 index 0000000..428b133 --- /dev/null +++ b/frontend/src/components/schema_editor/Viewport.vue @@ -0,0 +1,92 @@ + + + + + + Models + + + + Enums + + + + + + + + + + + + + + diff --git a/frontend/src/components/steps/DatabaseStep.vue b/frontend/src/components/steps/DatabaseStep.vue new file mode 100644 index 0000000..cb39d73 --- /dev/null +++ b/frontend/src/components/steps/DatabaseStep.vue @@ -0,0 +1,114 @@ + + + Choose a Database + + + + + {{ db }} + + + + + + + + + diff --git a/frontend/src/components/steps/FeatureSelectionStep.vue b/frontend/src/components/steps/FeatureSelectionStep.vue new file mode 100644 index 0000000..0e23489 --- /dev/null +++ b/frontend/src/components/steps/FeatureSelectionStep.vue @@ -0,0 +1,193 @@ + + + Project Features + + + {{ category }} + + + + {{ feature.label }} + + + + + + + + + diff --git a/frontend/src/components/steps/GenerationStep.vue b/frontend/src/components/steps/GenerationStep.vue new file mode 100644 index 0000000..7581f19 --- /dev/null +++ b/frontend/src/components/steps/GenerationStep.vue @@ -0,0 +1,25 @@ + + + Generate + GENERATE :P + + + + + + + diff --git a/frontend/src/components/steps/ProjectNameStep.vue b/frontend/src/components/steps/ProjectNameStep.vue new file mode 100644 index 0000000..6ceb2e3 --- /dev/null +++ b/frontend/src/components/steps/ProjectNameStep.vue @@ -0,0 +1,184 @@ + + + Choose a Project Name + + + + Project Name + + + + + Confirm + + + + {{ errorMessage }} + + + + + + + + diff --git a/frontend/src/components/steps/SchemaStep.vue b/frontend/src/components/steps/SchemaStep.vue new file mode 100644 index 0000000..b9ac90c --- /dev/null +++ b/frontend/src/components/steps/SchemaStep.vue @@ -0,0 +1,24 @@ + + + Design your Schema + + + + + + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..f1dba80 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,21 @@ +import "./assets/main.css" +import "vue-toastification/dist/index.css" + +import { createApp } from "vue" +import { createPinia } from "pinia" +import Toast, { POSITION, type PluginOptions } from "vue-toastification" +import App from "./App.vue" + +const app = createApp(App) + +app.use(createPinia()) + +const options: PluginOptions = { + position: POSITION.TOP_CENTER, + shareAppContext: true, + containerClassName: "container-class", +} + +app.use(Toast, options) + +app.mount("#app") diff --git a/frontend/src/stores/useModalStore.ts b/frontend/src/stores/useModalStore.ts new file mode 100644 index 0000000..a7246c0 --- /dev/null +++ b/frontend/src/stores/useModalStore.ts @@ -0,0 +1,32 @@ +import { defineStore } from "pinia" +import { ref, shallowRef, markRaw, type Component } from "vue" + +export const useModalStore = defineStore("modal", () => { + const isOpen = ref(false) + const modalTitle = ref("") + const currentComponent = shallowRef(null) + const props = ref>({}) + + function open(title: string, component: Component, componentProps: Record = {}) { + currentComponent.value = markRaw(component) + props.value = componentProps + modalTitle.value = title + isOpen.value = true + } + + function close() { + isOpen.value = false + currentComponent.value = null + props.value = {} + modalTitle.value = "" + } + + return { + isOpen, + modalTitle, + currentComponent, + props, + open, + close, + } +}) diff --git a/frontend/src/stores/useProjectStore.ts b/frontend/src/stores/useProjectStore.ts new file mode 100644 index 0000000..d06c430 --- /dev/null +++ b/frontend/src/stores/useProjectStore.ts @@ -0,0 +1,419 @@ +import { defineStore } from "pinia" +import { ref } from "vue" +import type { Ref } from "vue" +import type { + NodesArray, + EdgesArray, + EnumsArray, + NodeT, + EdgeT, + RelationalField, + RelationalRelationField, + EnumValue, + EnumT, +} from "@/types/types.ts" + +export const useProjectStore = defineStore("projectSpec", () => { + const projectSpec = ref({ project_name: "asd", database: "", models: [], custom_enums: [] }) + const isProjectNameConfirmed = ref(false) + + const enums: Ref = ref([ + { + name: "UserRole", + values: [ + { name: "ADMIN", value: "ADMIN" }, + { name: "USER", value: "auto()" }, + ], + }, + ]) + + const nodes: Ref = ref([ + { + id: "user", + data: { + fields: [ + { name: "id", type: "UUID", isPrimaryKey: true, defaultValue: "uuid.uuid4" }, + { name: "name", type: "String" }, + { name: "email", type: "String" }, + { name: "role", type: "Enum", typeEnum: "UserRole", defaultValue: "ADMIN" }, + { name: "created_at", type: "DateTime" }, + { name: "updated_at", type: "DateTime" }, + ], + relations: [ + { + fieldName: "post_id", + targetModel: "post", + onDelete: "CASCADE", + isNullable: false, + isUnique: false, + isIndex: false, + }, + ], + }, + type: "custom", + position: { x: 50, y: 50 }, + }, + { + id: "post", + data: { + fields: [ + { name: "id", type: "UUID", isPrimaryKey: true, defaultValue: "uuid.uuid4" }, + { name: "created_at", type: "DateTime" }, + { name: "updated_at", type: "DateTime" }, + ], + relations: [], + }, + type: "custom", + position: { x: 150, y: 355 }, + }, + ]) + + const edges: Ref = ref([ + { + id: "(user)-(post)-(post_id)", + source: "user", + target: "post", + type: "smoothstep", + }, + ]) + + const convertToPayload = () => { + const models = nodes.value.map((node) => { + const modelName = node.id + + const fields = node.data.fields.map((field) => { + return { + name: field.name, + type: field.type, + type_enum: field.typeEnum ?? null, + primary_key: field.isPrimaryKey ?? false, + nullable: field.isNullable ?? false, + unique: field.isUnique ?? false, + index: field.isIndex ?? false, + default_value: field.defaultValue ?? null, + extra_kwargs: null, + metadata: { + is_created_at_timestamp: field.name === "created_at", + is_updated_at_timestamp: field.name === "updated_at", + is_foreign_key: false, + }, + } + }) + + const relationships = node.data.relations.map((relation) => { + return { + field_name: relation.fieldName, + target_model: relation.targetModel, + back_populates: null, + on_delete: relation.onDelete ?? "CASCADE", + nullable: relation.isNullable ?? false, + unique: relation.isUnique ?? false, + index: relation.isIndex ?? false, + } + }) + + return { + name: modelName, + fields, + relationships, + metadata: { + create_endpoints: true, + create_tests: true, + create_daos: true, + create_dtos: true, + is_auth_model: false, + }, + } + }) + + const custom_enums = enums.value.map((enm) => { + return { + name: enm.name, + values: enm.values.map((val) => ({ + name: val.name, + value: val.value, + })), + } + }) + + return { + project_name: projectSpec.value.project_name, + use_postgres: true, + use_alembic: true, + models, + custom_enums, + } + } + + const callGenerateEndpoint = async () => { + const payload = convertToPayload() + + try { + const response = await fetch("http://localhost:8000/generate", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(payload), + }) + + if (!response.ok) { + const errorText = await response.text() + throw new Error(`Error ${response.status}: ${errorText}`) + } + + const result = await response.json() + console.log("Generation successful:", result) + return result + } catch (error) { + console.error("Generation failed:", error) + throw error + } + } + + const findNodeById = (id: string): NodeT | undefined => { + return nodes.value.find((node) => node.id === id) + } + + const createNode = (id: string): void => { + if (findNodeById(id)) return + nodes.value.push({ + id, + data: { fields: [], relations: [] }, + type: "custom", + position: { x: 100, y: 100 }, + }) + } + + const deleteNode = (id: string): void => { + const node = findNodeById(id) + if (!node) return + nodes.value = nodes.value.filter((node) => node.id !== id) + edges.value = edges.value.filter((edge) => edge.source !== id && edge.target !== id) + nodes.value.forEach((node) => { + if (node.data.relations) { + node.data.relations = node.data.relations?.filter((relation) => relation.targetModel !== id) + } + }) + } + + const renameNode = (source: string, newName: string) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + const existingNode = findNodeById(newName) + if (existingNode) throw new Error(`Duplicate name: ${newName}`) + node.id = newName + edges.value.forEach((edge) => { + if (edge.source === source) edge.source = newName + if (edge.target === source) edge.target = newName + edge.id = edge.id.replace(`(${source})`, `(${newName})`) + }) + + nodes.value.forEach((n) => { + n.data.relations.forEach((rel) => { + if (rel.targetModel === source) { + rel.targetModel = newName + } + }) + }) + } + + const nameExistsInModel = (node: NodeT, name: string): boolean => { + const existingFieldname = node.data.fields.find((field) => field.name === name) + const existingRelationFieldName = node.data.relations.find( + (relation) => relation.fieldName === name, + ) + return !!existingFieldname || !!existingRelationFieldName + } + + const addField = (source: string, fieldData: RelationalField) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + if (nameExistsInModel(node, fieldData.name)) + throw new Error(`Field name already exists for model: ${source}`) + node.data.fields.push(fieldData) + } + + const updateField = (source: string, originalFieldName: string, fieldData: RelationalField) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + const fieldIndex = node.data.fields.findIndex((f) => f.name === originalFieldName) + if (fieldIndex === -1) throw new Error(`Field does not exist: ${originalFieldName}`) + node.data.fields[fieldIndex] = fieldData + console.log(fieldData) + } + + const deleteField = (source: string, fieldName: string) => { + const node = findNodeById(source) + if (!node) throw new Error(`Model does not exist: ${source}`) + node.data.fields = node.data.fields.filter((field) => field.name !== fieldName) + } + + const addRelation = ( + source: string, + target: string, + relationData: RelationalRelationField, + ): void => { + const node = findNodeById(source) + if (!node) return + createEdge(source, target, relationData.fieldName) + node.data.relations.push(relationData) + } + + const deleteRelation = (source: string, target: string, fieldName: string) => { + const node = findNodeById(source) + if (!node) return + node.data.relations = node.data.relations.filter((relation) => relation.fieldName !== fieldName) + deleteEdge(source, target, fieldName) + } + + const updateRelation = ( + source: string, + originalTarget: string, + originalFieldName: string, + relationData: RelationalRelationField, + ): void => { + const node = findNodeById(source) + if (!node || !node.data.relations) return + const index = node.data.relations.findIndex((rel) => rel.fieldName === originalFieldName) + node.data.relations[index] = relationData + + const edgeId = formatEdgeId(source, originalTarget, originalFieldName) + const edge = getEdgeById(edgeId) + if (!edge) return + + const newEdgeId = formatEdgeId(source, relationData.targetModel, relationData.fieldName) + edge.id = newEdgeId + edge.source = source + edge.target = relationData.targetModel + } + + const getEdgeById = (id: string): EdgeT | undefined => { + return edges.value.find((edge) => edge.id === id) + } + + const formatEdgeId = (source: string, target: string, fieldName: string): string => { + return `(${source})-(${target})-(${fieldName})` + } + + const createEdge = (source: string, target: string, fieldName: string): void => { + if (source === target) return + edges.value.push({ + id: formatEdgeId(source, target, fieldName), + source, + target, + type: "smoothstep", + }) + } + + const deleteEdge = (source: string, target: string, fieldName: string) => { + edges.value = edges.value.filter((edge) => edge.id !== formatEdgeId(source, target, fieldName)) + } + + const findEnumByName = (name: string): EnumT => { + const en = enums.value.find((e) => e.name === name) + if (!en) throw Error(`Enum not found: ${name}`) + return en + } + + const findEnumValue = (enumName: string, enumValueName: string): EnumValue => { + const en = findEnumByName(enumName) + const ev = en.values.find((v) => v.name === enumValueName) + if (!ev) throw Error(`EnumValue not found: ${enumValueName}`) + return ev + } + + const addEnum = (name: string): EnumT => { + const newEnum = { name: name, values: [] } + enums.value.push(newEnum) + return newEnum + } + const updateEnumName = (oldName: string, newName: string) => { + const en = findEnumByName(oldName) + en.name = newName + nodes.value.forEach((n) => { + n.data.fields.forEach((f) => { + if (f.type === "Enum" && f.typeEnum === oldName) { + f.typeEnum = newName + } + }) + }) + } + const deleteEnum = (name: string) => { + enums.value = enums.value.filter((e) => e.name !== name) + nodes.value.forEach((n) => { + n.data.fields = n.data.fields.filter((f) => f.typeEnum !== name) + }) + } + + const addEnumValue = (enumName: string, enumValue: EnumValue) => { + const en = findEnumByName(enumName) + en.values.push(enumValue) + } + const updateEnumValue = (enumName: string, enumValueName: string, newEnumValue: EnumValue) => { + const ev = findEnumValue(enumName, enumValueName) + ev.name = newEnumValue.name + ev.value = newEnumValue.value + + console.log(enumName) + console.log(newEnumValue) + + nodes.value.forEach((n) => { + n.data.fields.forEach((f) => { + if (f.type === "Enum" && f.typeEnum === enumName) { + f.defaultValue = newEnumValue.name + } + }) + }) + } + const deleteEnumValue = (enumName: string, enumValueName: string) => { + const en = findEnumByName(enumName) + en.values = en.values.filter((e) => e.name !== enumValueName) + } + + const setProjectName = (projectName: string): void => { + projectSpec.value.project_name = projectName + } + const getProjectName = (): string => { + return projectSpec.value.project_name + } + + const setDatabase = (database: string): void => { + projectSpec.value.database = database + } + const getDatabase = (): string => { + return projectSpec.value.database + } + + return { + nodes, + edges, + enums, + createNode, + createEdge, + deleteNode, + renameNode, + addField, + deleteField, + updateField, + addRelation, + deleteRelation, + updateRelation, + projectSpec, + isProjectNameConfirmed, + setProjectName, + getProjectName, + setDatabase, + getDatabase, + findNodeById, + findEnumByName, + addEnum, + updateEnumName, + deleteEnum, + addEnumValue, + updateEnumValue, + deleteEnumValue, + convertNodesToModel: convertToPayload, + callGenerateEndpoint, + } +}) diff --git a/frontend/src/types/types.ts b/frontend/src/types/types.ts new file mode 100644 index 0000000..62b02bd --- /dev/null +++ b/frontend/src/types/types.ts @@ -0,0 +1,69 @@ +export interface Position2D { + x: number + y: number +} + +export type FieldType = "String" | "UUID" | "DateTime" | "Number" | "Boolean" | "String" | "Enum" + +export interface RelationalFieldMetadata { + isCreatedAtTimestamp?: boolean + isUpdatedAtTimestamp?: boolean +} + +export interface RelationalField { + name: string + type: FieldType + typeEnum?: string + isPrimaryKey?: boolean + isNullable?: boolean + isUnique?: boolean + isIndex?: boolean + defaultValue?: string + metadata?: RelationalFieldMetadata + extraKwargs?: object +} + +export type OnDeleteType = "CASCADE" | "SET NULL" + +export interface RelationalRelationField { + fieldName: string + targetModel: string + onDelete: OnDeleteType + backPopulates?: string + isNullable?: boolean + isUnique?: boolean + isIndex?: boolean +} + +export interface RelationalNodeData { + fields: Array + relations: Array +} + +export interface NodeT { + id: string + data: RelationalNodeData + type: string + position: Position2D +} + +export interface EdgeT { + id: string + source: string + target: string + type: string +} + +export interface EnumValue { + name: string + value: string +} + +export interface EnumT { + name: string + values: Array +} + +export type NodesArray = Array +export type EdgesArray = Array +export type EnumsArray = Array diff --git a/frontend/src/utils/toast.ts b/frontend/src/utils/toast.ts new file mode 100644 index 0000000..9e90554 --- /dev/null +++ b/frontend/src/utils/toast.ts @@ -0,0 +1,14 @@ +import { useToast } from "vue-toastification" +const toast = useToast() + +export const showSuccessToast = (msg: string) => { + toast.success(msg, { toastClassName: "container-class" }) +} + +export const showDangerToast = (msg: string) => { + toast.error(msg, { toastClassName: "container-class" }) +} + +export const showWarningToast = (msg: string) => { + toast.warning(msg, { toastClassName: "container-class" }) +} diff --git a/frontend/src/utils/validation.ts b/frontend/src/utils/validation.ts new file mode 100644 index 0000000..fb78424 --- /dev/null +++ b/frontend/src/utils/validation.ts @@ -0,0 +1,34 @@ +const patterns = { + boundedStr: /^.{1,100}$/, + snakeCase: /^[a-z][a-z0-9_]*$/, + pascalCase: /^[A-Z][a-z]*$/, + enumStr: /^[a-zA-Z][a-zA-Z0-9_]*$/, + variableStr: /^[a-zA-Z_][a-zA-Z0-9_-]*$/, +} + +export const isValidProjectName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidModelName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidEnumName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.pascalCase.test(value) +} +export const isValidEnumValueName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.variableStr.test(value) +} + +export const isValidFieldName = (value: string): boolean => { + return patterns.boundedStr.test(value) && patterns.snakeCase.test(value) +} + +export const warningMessages = { + projectName: "Use 1-100 characters. Start with a letter or underscore. Example: my_project1", + modelName: "Use 1-100 characters. Start with a letter or underscore. Example: userModel_1", + enumName: "Use PascalCase (start with uppercase). Example: UserStatus", + enumValueName: "Use 1-100 characters. Start with a letter or underscore. Example: active_status", + fieldName: "Use lowercase snake_case. Example: user_name", +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..913b8f2 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..a83dfc9 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*", + "eslint.config.*" + ], + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..d6eb786 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,22 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + ], + build: { + outDir: '../fastapi_forge/static', + emptyOutDir: true, + }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +}) diff --git a/pyproject.toml b/pyproject.toml index fc4d66f..28d6668 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,8 @@ authors = [{ name = "mslaursen", email = "mslaursendk@gmail.com" }] [project.urls] Repository = "https://github.com/mslaursen/fastapi-forge.git" -[tool.setuptools_scm] +[tool.setuptools] +py-modules = ["fastapi_forge"] [project.scripts] fastapi-forge = "fastapi_forge.__main__:main" diff --git a/tests/test_type_registry.py b/tests/test_type_registry.py index cb439c8..90a14a3 100644 --- a/tests/test_type_registry.py +++ b/tests/test_type_registry.py @@ -36,29 +36,6 @@ def test_registry_get_not_found(type_info_registry: TypeInfoRegistry) -> None: assert "Key 'Boolean' not found." in str(exc_info.value) -def test_key_already_registered(type_info_registry: TypeInfoRegistry) -> None: - type_info_registry.register( - FieldDataTypeEnum.STRING, - TypeInfo( - sqlalchemy_type="String", - sqlalchemy_prefix=True, - python_type="str", - ), - ) - with pytest.raises(KeyError) as exc_info: - type_info_registry.register( - FieldDataTypeEnum.STRING, - TypeInfo( - sqlalchemy_type="String", - sqlalchemy_prefix=True, - python_type="str", - ), - ) - assert "TypeInfoRegistry: Key 'String' is already registered." in str( - exc_info.value - ) - - ############################## # EnumTypeInfoRegistry tests # ############################## @@ -86,13 +63,3 @@ def test_custom_enum_register_w_values() -> None: type_info = enum_registry.get(enum.name) assert type_info.sqlalchemy_type == 'Enum(enums.HTTPMethod, name="http_method")' assert type_info.faker_field_value == "enums.HTTPMethod.GET" - - -def test_duplicate_custom_enum() -> None: - CustomEnum(name="TEST") - with pytest.raises(KeyError) as exc_info: - CustomEnum(name="TEST") - - assert "EnumTypeInfoRegistry: Key 'TEST' is already registered." in str( - exc_info.value - ) diff --git a/uv.lock b/uv.lock index 70e9045..95dab77 100644 --- a/uv.lock +++ b/uv.lock @@ -303,7 +303,7 @@ wheels = [ [[package]] name = "fastapi-forge" -version = "0.1.dev213+g48eaca0.d20250524" +version = "0.0.0" source = { editable = "." } dependencies = [ { name = "click" },
{{ error }}