diff --git a/.gitignore b/.gitignore index 9a8f819..b1d16ac 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,4 @@ commit/public/node_modules/ commit/www/commit.html commit/www/commit-docs.html commit/public/commit -commit/public/docs \ No newline at end of file +commit/public/docs diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..9a174e1 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,23 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-json + - id: check-added-large-files + + # Enable basic Python formatting and import sorting if available + - repo: https://github.com/psf/black + rev: 24.8.0 + hooks: + - id: black + language_version: python3 + + - repo: https://github.com/PyCQA/isort + rev: 5.13.2 + hooks: + - id: isort + name: isort (python) + args: ["--profile", "black"] diff --git a/MANIFEST.in b/MANIFEST.in index fc6bd84..04f99fb 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -15,4 +15,4 @@ recursive-include commit *.png recursive-include commit *.py recursive-include commit *.svg recursive-include commit *.txt -recursive-exclude commit *.pyc \ No newline at end of file +recursive-exclude commit *.pyc diff --git a/README.md b/README.md index fde67ea..26e8471 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

Developer tooling for the Frappeverse 🪐

- Install on Frappe Cloud» + Install on Frappe Cloud »

Learn More » @@ -26,17 +26,79 @@ Commits-per-month

+ # [commit](https://commit.frappe.cloud/) -Born out of a need to improve developer tooling for Frappe, "Commit" allows you to visualize your app's database schema and view all it's APIs - improving developer productivity and security of your critical applications. +Born out of a need to improve developer tooling for Frappe, "Commit" allows you to visualize your app's database schema and view all its APIs, generate documentation for the APIs, and manage your documentation through Commit Docs - improving developer productivity and security of your critical applications. + ## Basic Installation The below guide assumes that you already have a working Frappe and Bench installation. If you do not have it, then please head over to [Official Installation Guide](https://frappeframework.com/docs/user/en/installation). -Go ahead and create a fresh new bench +Go ahead and create a fresh new bench: +```bash +# Initialize a new bench +bench init commit +``` + +```bash +# Get the Commit app +bench get-app https://github.com/The-commit-company/commit +``` + +```bash +# Create a new site +bench new-site my-site.localhost +``` + +```bash +# Install the Commit app on the site +bench --site my-site.localhost install-app commit +``` + +## Tech Stack + +### Common Across Web and Mobile +- **Frappe Framework**: An open-source full-stack development framework using Python, MariaDB/Postgres, socket.io, and Redis. +- **React**: A JavaScript library for building user interfaces. +- **Frappe React SDK**: A React Hooks library for handling auth, data fetching, and API calls to the Frappe Framework backend. +- **Tailwind CSS**: A utility-first CSS framework. +- **MDX**: A Markdown format that allows you to use JSX components in your Markdown files. +- **OpenAI API**: For AI-assisted documentation generation and editing. + +--- + +## Production Setup + +### Managed Hosting +You can try **Frappe Cloud**, a simple, user-friendly, and sophisticated open-source platform to host Frappe applications with peace of mind. + +It takes care of installation, setup, upgrades, monitoring, maintenance, and support of your Frappe deployments. It is a fully featured developer platform with the ability to manage and control multiple Frappe deployments. + +[Try on Frappe Cloud](https://frappecloud.com/) +Screenshot 2025-04-02 at 6 35 01 PM + + +## Key Features + +- **Database Schema Visualization**: View and analyze your application's database structure graphically.Screenshot 2025-04-02 at 6 34 50 PM + +- **API Explorer**: Easily access and test API endpoints within the Frappe framework.imageimage + + +- **Command Reference**: Get an overview of available Frappe commands. +- image + +- **Documentation Generation**: Auto-generate API documentation.image + +- **OpenAI Integration**: Edit and refine documentation using AI assistance. +- **Commit Docs**: Manage and publish documentation for your applications.image + +- **Docs Dashboard**: View and manage all your documentation in one place. +- image + +- **MDX Support**: Write JavaScript and React components in your Markdown files. +- image -- `bench init commit` -- `bench get-app https://github.com/The-commit-company/commit` -- `bench new-site ` -- `bench --site install-app commit` +- **Customizable**: Tailor the tool to fit your specific needs and preferences. diff --git a/commit/__init__.py b/commit/__init__.py index 88a7e16..5becc17 100644 --- a/commit/__init__.py +++ b/commit/__init__.py @@ -1,3 +1 @@ - -__version__ = '1.0.0' - +__version__ = "1.0.0" diff --git a/commit/api/api_explorer.py b/commit/api/api_explorer.py index 9d9a830..fe04490 100644 --- a/commit/api/api_explorer.py +++ b/commit/api/api_explorer.py @@ -1,18 +1,28 @@ -import frappe import json import os + +import frappe + from commit.commit.code_analysis.apis import find_all_occurrences_of_whitelist @frappe.whitelist(allow_guest=True) def get_apis_for_project(project_branch: str): - ''' - Gets the Project Branch document with the organization and app name - ''' - branch_doc = frappe.get_doc("Commit Project Branch", project_branch) + """ + Gets the Project Branch document with the organization and app name + """ + branch_doc = frappe.get_cached_doc("Commit Project Branch", project_branch) - apis = json.loads(branch_doc.whitelisted_apis).get("apis", []) if branch_doc.whitelisted_apis else [] - documentation = json.loads(branch_doc.documentation).get("apis", []) if branch_doc.documentation else [] + apis = ( + json.loads(branch_doc.whitelisted_apis).get("apis", []) + if branch_doc.whitelisted_apis + else [] + ) + documentation = ( + json.loads(branch_doc.documentation).get("apis", []) + if branch_doc.documentation + else [] + ) for api in apis: # find the documentation for the api whose function_name equals to name and path same as path for doc in documentation: @@ -20,21 +30,30 @@ def get_apis_for_project(project_branch: str): try: doc = json.loads(doc) except json.JSONDecodeError: - frappe.log_error(f"Invalid JSON format in documentation entry: {doc}", "Commit Docs Error") + frappe.log_error( + f"Invalid JSON format in documentation entry: {doc}", + "Commit Docs Error", + ) continue - if doc.get("function_name") == api.get("name") and doc.get("path") == api.get("api_path"): + if doc.get("function_name") == api.get("name") and doc.get( + "path" + ) == api.get("api_path"): api["documentation"] = doc.get("documentation") api["last_updated"] = doc.get("last_updated") api["is_published"] = doc.get("is_published", 0) api["published_on"] = doc.get("published_on", None) api["published_by"] = doc.get("published_by", None) - api['publish_id'] = doc.get('publish_id', None) - api['published_route'] = doc.get('published_route', None) + api["publish_id"] = doc.get("publish_id", None) + api["published_route"] = doc.get("published_route", None) break - - app_name, organization, app_logo = frappe.db.get_value("Commit Project", branch_doc.project, ["app_name", "org", "image"]) - organization_name, org_logo, organization_id = frappe.db.get_value("Commit Organization", organization, ["organization_name", "image", "name"]) + + app_name, organization, app_logo = frappe.db.get_value( + "Commit Project", branch_doc.project, ["app_name", "org", "image"] + ) + organization_name, org_logo, organization_id = frappe.db.get_value( + "Commit Organization", organization, ["organization_name", "image", "name"] + ) return { "apis": apis, @@ -46,30 +65,36 @@ def get_apis_for_project(project_branch: str): "branch_name": branch_doc.branch_name, "project_branch": branch_doc.name, "last_updated": branch_doc.last_fetched, - 'path_to_folder':branch_doc.path_to_folder + "path_to_folder": branch_doc.path_to_folder, } @frappe.whitelist(allow_guest=True) -def get_file_content_from_path(project_branch: str, file_path: str,block_start: int, block_end: int,viewer_type: str): - ''' - Gets the Project Branch document with the organization and app name - ''' +def get_file_content_from_path( + project_branch: str, + file_path: str, + block_start: int, + block_end: int, + viewer_type: str, +): + """ + Gets the Project Branch document with the organization and app name + """ if viewer_type == "project": - branch_doc = frappe.get_doc("Commit Project Branch", project_branch) + branch_doc = frappe.get_cached_doc("Commit Project Branch", project_branch) - api_data = json.loads(branch_doc.whitelisted_apis)['apis'] + api_data = json.loads(branch_doc.whitelisted_apis)["apis"] else: app_path = frappe.get_app_path(project_branch) # remove last part of the path which is the app name - app_path = app_path.rsplit('/', 1)[0] - api_data = find_all_occurrences_of_whitelist(app_path,project_branch) + app_path = app_path.rsplit("/", 1)[0] + api_data = find_all_occurrences_of_whitelist(app_path, project_branch) found = False for api in api_data: - if api['file'] == file_path: + if api["file"] == file_path: found = True break @@ -77,12 +102,10 @@ def get_file_content_from_path(project_branch: str, file_path: str,block_start: frappe.throw("File not found-") else: if os.path.isfile(file_path): - file_content = open(file_path, 'r') + file_content = open(file_path, "r") file_content = file_content.readlines() # fetch the block file_content = file_content[block_start:block_end] - return { - "file_content": file_content - } + return {"file_content": file_content} else: - frappe.throw("File not found") \ No newline at end of file + frappe.throw("File not found") diff --git a/commit/api/bruno.py b/commit/api/bruno.py index 88eb96a..3cd56d8 100644 --- a/commit/api/bruno.py +++ b/commit/api/bruno.py @@ -1,12 +1,13 @@ import frappe + @frappe.whitelist(allow_guest=True) -def generate_bruno_file(data, return_type='download'): +def generate_bruno_file(data, return_type="download"): request_data = frappe.parse_json(data) """ Generates .bru file content for a single request based on the provided request data. - - :param request_data: A dictionary containing request information. + + :param request_data: A dictionary containing request information. Expected keys are: - name: The name of the request. - arguments: A list of dictionaries containing argument information. @@ -24,15 +25,21 @@ def generate_bruno_file(data, return_type='download'): :return: A dictionary where keys are request types and values are the content of the corresponding .bru files. """ base_url_template = "{{baseUrl}}/api/method" - + def format_name(name): - return ' '.join(word.capitalize() for word in name.split('_')) - - name = format_name(request_data.get('name', 'Request')) - api_path = request_data.get('api_path', '') - request_types = request_data.get('request_types', ['GET']) or ['GET'] # Default to GET if empty - params = {arg['argument']: arg['default'] for arg in request_data.get('arguments', []) if arg['argument']} - + return " ".join(word.capitalize() for word in name.split("_")) + + name = format_name(request_data.get("name", "Request")) + api_path = request_data.get("api_path", "") + request_types = request_data.get("request_types", ["GET"]) or [ + "GET" + ] # Default to GET if empty + params = { + arg["argument"]: arg["default"] + for arg in request_data.get("arguments", []) + if arg["argument"] + } + bru_files = {} request_type = request_types[0] @@ -40,30 +47,34 @@ def format_name(name): request_type_upper = request_type.upper() request_type_lower = request_type.lower() url = f"{base_url_template}/{api_path}" - - query_string = '&'.join([f'{k}={v}' for k, v in params.items() if v]) - full_url = f'{url}?{query_string}' if query_string else url + + query_string = "&".join([f"{k}={v}" for k, v in params.items() if v]) + full_url = f"{url}?{query_string}" if query_string else url bru_content = [] # Meta section - bru_content.append(f'meta {{\n name: {name}\n type: http\n seq: {seq}\n}}\n') + bru_content.append(f"meta {{\n name: {name}\n type: http\n seq: {seq}\n}}\n") # Request section - bru_content.append(f'{request_type_lower} {{\n url: {full_url}\n body: none\n auth: none\n}}\n') + bru_content.append( + f"{request_type_lower} {{\n url: {full_url}\n body: none\n auth: none\n}}\n" + ) # Params section if params: - bru_content.append(f'params:query {{\n') + bru_content.append(f"params:query {{\n") for k, v in params.items(): if v: - bru_content.append(f' {k}: {v}\n') - bru_content.append('}\n') - - bru_files[request_type_upper] = '\n'.join(bru_content) - if return_type == 'download': - frappe.local.response.filename = f'{name} {request_type}.bru' if len(request_types) > 1 else f'{name}.bru' + bru_content.append(f" {k}: {v}\n") + bru_content.append("}\n") + + bru_files[request_type_upper] = "\n".join(bru_content) + if return_type == "download": + frappe.local.response.filename = ( + f"{name} {request_type}.bru" if len(request_types) > 1 else f"{name}.bru" + ) frappe.local.response.filecontent = bru_files[request_type_upper] - frappe.local.response.type = 'download' + frappe.local.response.type = "download" else: - return bru_files[request_type_upper] \ No newline at end of file + return bru_files[request_type_upper] diff --git a/commit/api/code_analysis.py b/commit/api/code_analysis.py index ef81590..b497f50 100644 --- a/commit/api/code_analysis.py +++ b/commit/api/code_analysis.py @@ -1,20 +1,29 @@ import frappe -from commit.api.github import get_file_in_repo, get_all_files_in_repo, search_for_file_in_repo -from commit.utils.conversions import convert_module_name + +from commit.api.github import ( + get_all_files_in_repo, + get_file_in_repo, + search_for_file_in_repo, +) from commit.utils.api_analysis import get_api_details_from_file_contents +from commit.utils.conversions import convert_module_name + access_token = "*" + @frappe.whitelist(allow_guest=True) def get_name_of_app(organization, repo): - ''' + """ Get name of app from repo - ''' + """ file_type = None app_name = None root_files = get_all_files_in_repo(access_token, organization, repo) if type(root_files) == dict and root_files.get("message", "") == "Not Found": - return frappe.throw(f'Repository {repo} not found in organization {organization}') - + return frappe.throw( + f"Repository {repo} not found in organization {organization}" + ) + for file in root_files: if file["name"] == "pyproject.toml": file_type = "pyproject.toml" @@ -22,62 +31,83 @@ def get_name_of_app(organization, repo): elif file["name"] == "setup.py": file_type = "setup.py" break - + if file_type == "pyproject.toml": app_name = get_app_name_from_pyproject_toml(organization, repo) elif file_type == "setup.py": - app_name = get_app_name_from_setup_py(organization, repo) + app_name = get_app_name_from_setup_py(organization, repo) return app_name + def get_app_name_from_setup_py(organization, repo): - ''' + """ Get app name from setup.py - ''' + """ setup_py = get_file_in_repo(access_token, organization, repo, "setup.py") - app_name = setup_py.split("name=")[1].split(",")[0].strip().replace("'", "").replace('"', '') + app_name = ( + setup_py.split("name=")[1] + .split(",")[0] + .strip() + .replace("'", "") + .replace('"', "") + ) return app_name def get_app_name_from_pyproject_toml(organization, repo): - ''' + """ Get app name from pyproject.toml - ''' - pyproject_toml = get_file_in_repo(access_token, organization, repo, "pyproject.toml") + """ + pyproject_toml = get_file_in_repo( + access_token, organization, repo, "pyproject.toml" + ) split_result = pyproject_toml.split("name = ") if len(split_result) > 1: - app_name = pyproject_toml.split("name = ")[1].split("\n")[0].strip().replace("'", "").replace('"', '') + app_name = ( + pyproject_toml.split("name = ")[1] + .split("\n")[0] + .strip() + .replace("'", "") + .replace('"', "") + ) else: app_name = get_app_name_from_setup_py(organization, repo) return app_name + # TODO: Function to get app version # def get_app_version # TODO: Function to get list of all dependencies in Python app # def get_list_of_dependencies + @frappe.whitelist(allow_guest=True) def get_list_of_modules(organization, repo, app_name): - ''' + """ Get list of modules for a Frappe app - ''' - modules = get_file_in_repo(access_token, organization, repo, app_name + "/modules.txt") + """ + modules = get_file_in_repo( + access_token, organization, repo, app_name + "/modules.txt" + ) return modules.split("\n") @frappe.whitelist(allow_guest=True) def get_list_of_doctypes_in_module(organization, repo, app_name, module: str): - ''' + """ Get list of doctypes in a module - ''' + """ module_pathname = convert_module_name(module) query = f"path:{app_name}/{module_pathname}/doctype+{module} in:file" - search_results = search_for_file_in_repo(access_token, organization, repo, query, 'json') + search_results = search_for_file_in_repo( + access_token, organization, repo, query, "json" + ) if search_results.get("total_count", 0) == 0: return [] - + doctypes = [] for result in search_results["items"]: path = result["path"] @@ -85,53 +115,48 @@ def get_list_of_doctypes_in_module(organization, repo, app_name, module: str): doctype_json = frappe.parse_json(doctype_json_content) if doctype_json.get("doctype", "") == "DocType": doctypes.append(doctype_json) - return { - "module": module, - "doctypes": doctypes, - "count": len(doctypes) - } + return {"module": module, "doctypes": doctypes, "count": len(doctypes)} + @frappe.whitelist(allow_guest=True) def get_customized_doctypes_in_module(organization, repo, app_name, module: str): - ''' + """ Get list of all customized doctypes for a Frappe app - ''' + """ module_pathname = convert_module_name(module) query = f"path:{app_name}/{module_pathname}/custom+custom_fields in:file" - search_results = search_for_file_in_repo(access_token, organization, repo, query, 'json') + search_results = search_for_file_in_repo( + access_token, organization, repo, query, "json" + ) if search_results.get("total_count", 0) == 0: return [] - + doctypes = [] for result in search_results["items"]: path = result["path"] doctype_json_content = get_file_in_repo(access_token, organization, repo, path) doctype_json = frappe.parse_json(doctype_json_content) doctypes.append(doctype_json) - return { - "module": module, - "doctypes": doctypes, - "count": len(doctypes) - } + return {"module": module, "doctypes": doctypes, "count": len(doctypes)} @frappe.whitelist(allow_guest=True) def get_all_whitelisted_api_in_app(organization, repo): - ''' + """ Get list of all whitelisted API in a Frappe app with: 1. Type 2. Path 3. Method name 4. Arguments 5. Python code snippet - ''' + """ query = f"@frappe.whitelist in:file+language:python" search_results = search_for_file_in_repo(access_token, organization, repo, query) if search_results.get("total_count", 0) == 0: return [] - + apis = [] for result in search_results["items"]: path = result["path"] @@ -145,8 +170,5 @@ def get_all_whitelisted_api_in_app(organization, repo): # api = get_whitelisted_api_in_file(path) # if api: # apis.append(api) - - return { - "count": len(apis), - "apis": apis - } \ No newline at end of file + + return {"count": len(apis), "apis": apis} diff --git a/commit/api/commit_project/commit_project.py b/commit/api/commit_project/commit_project.py index 95f568b..f55a152 100644 --- a/commit/api/commit_project/commit_project.py +++ b/commit/api/commit_project/commit_project.py @@ -7,15 +7,47 @@ def get_project_list_with_branches(): Get list of projects with branches for each organization """ - organizations = frappe.get_all("Commit Organization", fields=[ - "name", 'organization_name', 'github_org', 'image', 'about', 'creation']) + organizations = frappe.get_all( + "Commit Organization", + fields=[ + "name", + "organization_name", + "github_org", + "image", + "about", + "creation", + ], + ) for organization in organizations: - projects = frappe.get_all("Commit Project", filters={ - "org": organization.get("name")}, fields=["name", "display_name", "repo_name", "app_name", "image", "banner_image", "path_to_folder", 'description'], order_by="creation desc") + projects = frappe.get_all( + "Commit Project", + filters={"org": organization.get("name")}, + fields=[ + "name", + "display_name", + "repo_name", + "app_name", + "image", + "banner_image", + "path_to_folder", + "description", + ], + order_by="creation desc", + ) # organization["projects"] = projects for project in projects: - branches = frappe.get_all("Commit Project Branch", filters={"project": project.get( - "name")}, fields=["branch_name", "last_fetched", "modules", "whitelisted_apis", "name", "frequency"]) + branches = frappe.get_all( + "Commit Project Branch", + filters={"project": project.get("name")}, + fields=[ + "branch_name", + "last_fetched", + "modules", + "whitelisted_apis", + "name", + "frequency", + ], + ) project["branches"] = branches organization["projects"] = projects diff --git a/commit/api/convert_to_webp.py b/commit/api/convert_to_webp.py index f9406f9..33b5e38 100644 --- a/commit/api/convert_to_webp.py +++ b/commit/api/convert_to_webp.py @@ -1,101 +1,108 @@ -import frappe -from frappe.core.doctype.file.utils import delete_file +import os from urllib.parse import unquote + +import frappe import requests -from PIL import Image from frappe.core.doctype.file.file import get_local_image +from frappe.core.doctype.file.utils import delete_file from frappe.model.document import Document -import os +from PIL import Image + @frappe.whitelist() -def convert_to_webp(image_url: str | None = None, file_doc: Document | None = None) -> str: - """BETA: Convert image to webp format""" - - CONVERTIBLE_IMAGE_EXTENSIONS = ["png", "jpeg", "jpg"] - - def can_convert_image(extn): - return extn.lower() in CONVERTIBLE_IMAGE_EXTENSIONS - - def get_extension(filename): - return filename.split(".")[-1].lower() - - def convert_and_save_image(image, path): - image.save(path, "WEBP") - return path - - def update_file_doc_with_webp(file_doc, image, extn): - webp_path = file_doc.get_full_path().replace(extn, "webp") - convert_and_save_image(image, webp_path) - delete_file(file_doc.get_full_path()) - file_doc.file_url = f"{file_doc.file_url.replace(extn, 'webp')}" - file_doc.save() - return file_doc.file_url - - def create_new_webp_file_doc(file_url, image, extn): - files = frappe.get_all("File", filters={"file_url": file_url}, fields=["name"], limit=1) - if files: - _file = frappe.get_doc("File", files[0].name) - webp_path = _file.get_full_path().replace(extn, "webp") - convert_and_save_image(image, webp_path) - new_file = frappe.copy_doc(_file) - new_file.file_name = f"{_file.file_name.replace(extn, 'webp')}" - new_file.file_url = f"{_file.file_url.replace(extn, 'webp')}" - new_file.save() - return new_file.file_url - return file_url - - def handle_image_from_url(image_url): - image_url = unquote(image_url) - response = requests.get(image_url) - image = Image.open(io.BytesIO(response.content)) - filename = image_url.split("/")[-1] - extn = get_extension(filename) - if can_convert_image(extn): - _file = frappe.get_doc( - { - "doctype": "File", - "file_name": f"{filename.replace(extn, 'webp')}", - "file_url": f"/files/{filename.replace(extn, 'webp')}", - } - ) - webp_path = _file.get_full_path() - convert_and_save_image(image, webp_path) - _file.save() - return _file.file_url - return image_url - - if not image_url and not file_doc: - return "" - - if file_doc: - if file_doc.file_url.startswith("/files"): - image, filename, extn = get_local_image(file_doc.file_url) - if can_convert_image(extn): - return update_file_doc_with_webp(file_doc, image, extn) - if file_doc.file_url.startswith("/private"): - image, filename, extn = get_local_image(file_doc.file_url) - if can_convert_image(extn): - return update_file_doc_with_webp(file_doc, image, extn) - - return file_doc.file_url - - if image_url.startswith("/files"): - image, filename, extn = get_local_image(image_url) - if can_convert_image(extn): - return create_new_webp_file_doc(image_url, image, extn) - return image_url - if image_url.startswith("/private"): - image, filename, extn = get_local_image(image_url) - if can_convert_image(extn): - return create_new_webp_file_doc(image_url, image, extn) - return image_url - if image_url.startswith("http"): - return handle_image_from_url(image_url) - - return image_url - -def save_webp_image(doctype:str,docname:str,image_field:str): - file_url = frappe.db.get_value(doctype,docname,image_field) - if file_url: - webp_url = convert_to_webp(file_url) - frappe.db.set_value(doctype,docname,image_field,webp_url) \ No newline at end of file +def convert_to_webp( + image_url: str | None = None, file_doc: Document | None = None +) -> str: + """BETA: Convert image to webp format""" + + CONVERTIBLE_IMAGE_EXTENSIONS = ["png", "jpeg", "jpg"] + + def can_convert_image(extn): + return extn.lower() in CONVERTIBLE_IMAGE_EXTENSIONS + + def get_extension(filename): + return filename.split(".")[-1].lower() + + def convert_and_save_image(image, path): + image.save(path, "WEBP") + return path + + def update_file_doc_with_webp(file_doc, image, extn): + webp_path = file_doc.get_full_path().replace(extn, "webp") + convert_and_save_image(image, webp_path) + delete_file(file_doc.get_full_path()) + file_doc.file_url = f"{file_doc.file_url.replace(extn, 'webp')}" + file_doc.save() + return file_doc.file_url + + def create_new_webp_file_doc(file_url, image, extn): + files = frappe.get_all( + "File", filters={"file_url": file_url}, fields=["name"], limit=1 + ) + if files: + _file = frappe.get_cached_doc("File", files[0].name) + webp_path = _file.get_full_path().replace(extn, "webp") + convert_and_save_image(image, webp_path) + new_file = frappe.copy_doc(_file) + new_file.file_name = f"{_file.file_name.replace(extn, 'webp')}" + new_file.file_url = f"{_file.file_url.replace(extn, 'webp')}" + new_file.save() + return new_file.file_url + return file_url + + def handle_image_from_url(image_url): + image_url = unquote(image_url) + response = requests.get(image_url) + image = Image.open(io.BytesIO(response.content)) + filename = image_url.split("/")[-1] + extn = get_extension(filename) + if can_convert_image(extn): + _file = frappe.get_cached_doc( + { + "doctype": "File", + "file_name": f"{filename.replace(extn, 'webp')}", + "file_url": f"/files/{filename.replace(extn, 'webp')}", + } + ) + webp_path = _file.get_full_path() + convert_and_save_image(image, webp_path) + _file.save() + return _file.file_url + return image_url + + if not image_url and not file_doc: + return "" + + if file_doc: + if file_doc.file_url.startswith("/files"): + image, filename, extn = get_local_image(file_doc.file_url) + if can_convert_image(extn): + return update_file_doc_with_webp(file_doc, image, extn) + if file_doc.file_url.startswith("/private"): + image, filename, extn = get_local_image(file_doc.file_url) + if can_convert_image(extn): + return update_file_doc_with_webp(file_doc, image, extn) + + return file_doc.file_url + + if image_url.startswith("/files"): + image, filename, extn = get_local_image(image_url) + if can_convert_image(extn): + return create_new_webp_file_doc(image_url, image, extn) + return image_url + if image_url.startswith("/private"): + image, filename, extn = get_local_image(image_url) + if can_convert_image(extn): + return create_new_webp_file_doc(image_url, image, extn) + return image_url + if image_url.startswith("http"): + return handle_image_from_url(image_url) + + return image_url + + +def save_webp_image(doctype: str, docname: str, image_field: str): + file_url = frappe.db.get_value(doctype, docname, image_field) + if file_url: + webp_url = convert_to_webp(file_url) + frappe.db.set_value(doctype, docname, image_field, webp_url) diff --git a/commit/api/erd_viewer.py b/commit/api/erd_viewer.py index 3826673..0d9ade4 100644 --- a/commit/api/erd_viewer.py +++ b/commit/api/erd_viewer.py @@ -1,30 +1,31 @@ +import json + import frappe + from commit.commit.code_analysis.schema_builder import get_schema_from_doctypes_json -import json @frappe.whitelist(allow_guest=True) def get_doctype_json(project_branch: str, doctype: str): - ''' + """ Get doctype json from a project branch - ''' - project_branch = frappe.get_cached_doc( - "Commit Project Branch", project_branch) + """ + project_branch = frappe.get_cached_doc("Commit Project Branch", project_branch) doctype_json = project_branch.get_doctype_json(doctype) return doctype_json @frappe.whitelist(allow_guest=True) def get_erd_schema_for_module(project_branch: str, module: str): - ''' + """ Get ERD schema for a module - ''' + """ - project_branch = frappe.get_cached_doc( - "Commit Project Branch", project_branch) + project_branch = frappe.get_cached_doc("Commit Project Branch", project_branch) module_doctypes = project_branch.get_doctypes_in_module(module) schema = get_erd_schema_for_doctypes( - project_branch.name, json.dumps(module_doctypes)) + project_branch.name, json.dumps(module_doctypes) + ) return schema @@ -34,47 +35,48 @@ def get_erd_schema_for_doctypes(project_branch: list, doctypes): branch_doctypes = {} doctype_list = [] for doctype in doctypes: - if doctype['project_branch'] not in branch_doctypes: - branch_doctypes[doctype['project_branch']] = [] - branch_doctypes[doctype['project_branch']].append(doctype['doctype']) - doctype_list.append(doctype['doctype']) + if doctype["project_branch"] not in branch_doctypes: + branch_doctypes[doctype["project_branch"]] = [] + branch_doctypes[doctype["project_branch"]].append(doctype["doctype"]) + doctype_list.append(doctype["doctype"]) doctype_jsons = [] for project_branch, doctypes in branch_doctypes.items(): project_branch_doc = frappe.get_cached_doc( - "Commit Project Branch", project_branch) + "Commit Project Branch", project_branch + ) for doctype in doctypes: doctype_json = project_branch_doc.get_doctype_json(doctype) doctype_jsons.append(doctype_json) - schema = get_schema_from_doctypes_json({ - 'doctypes': doctype_jsons, - 'doctype_names': doctype_list - }) + schema = get_schema_from_doctypes_json( + {"doctypes": doctype_jsons, "doctype_names": doctype_list} + ) return schema + @frappe.whitelist() -def get_meta_erd_schema_for_doctypes(doctypes:list): - ''' +def get_meta_erd_schema_for_doctypes(doctypes: list): + """ Get ERD schema for a list of doctypes - ''' + """ doctype_jsons = [] for doctype in doctypes: doctype_json = frappe.get_meta(doctype) doctype_jsons.append(doctype_json) - schema = get_schema_from_doctypes_json({ - 'doctypes': doctype_jsons, - 'doctype_names': doctypes - }) + schema = get_schema_from_doctypes_json( + {"doctypes": doctype_jsons, "doctype_names": doctypes} + ) return schema + @frappe.whitelist() def get_meta_for_doctype(doctype): - ''' + """ Get meta for a doctype - ''' - return frappe.get_meta(doctype) \ No newline at end of file + """ + return frappe.get_meta(doctype) diff --git a/commit/api/generate_documentation.py b/commit/api/generate_documentation.py index 8687f87..ce712e5 100644 --- a/commit/api/generate_documentation.py +++ b/commit/api/generate_documentation.py @@ -1,13 +1,17 @@ import json import re -from commit.commit.doctype.open_ai_settings.open_ai_settings import open_ai_call + import frappe + from commit.api.api_explorer import get_file_content_from_path +from commit.commit.doctype.open_ai_settings.open_ai_settings import open_ai_call def generate_docs_for_apis(api_definitions): - max_tokens_per_request = 1800 # This is a safe limit to avoid hitting the max token limit + max_tokens_per_request = ( + 1800 # This is a safe limit to avoid hitting the max token limit + ) chunks = chunk_data(api_definitions, max_tokens_per_request) all_docs = [] @@ -25,6 +29,7 @@ def estimate_tokens(text): # Estimate tokens based on average character count return len(text) // 4 + def chunk_data(data, max_tokens): chunks = [] current_chunk = [] @@ -47,6 +52,7 @@ def chunk_data(data, max_tokens): return chunks + def clean_response(response_text): # Remove non-JSON parts using regex cleaned_text = re.sub(r"```json|```", "", response_text.strip()) @@ -69,7 +75,7 @@ def generate_docs_for_chunk(api_chunk): "The response should be a valid JSON list of objects formatted as follows: " "{function_name: , path: , last_updated:, documentation: }.\n" "Ensure the response is in valid JSON format only, enclosed in triple backticks, and does not include `---`." - ) + ), } ] last_updated = frappe.utils.now() @@ -104,7 +110,8 @@ def generate_docs_for_chunk(api_chunk): return [] # return cleaned_response -def generate_documentation_for_api_snippet(api_path:str,code_snippet:str): + +def generate_documentation_for_api_snippet(api_path: str, code_snippet: str): messages = [ { "role": "system", @@ -119,10 +126,10 @@ def generate_documentation_for_api_snippet(api_path:str,code_snippet:str): "The response should be a valid JSON formatted as follows: " "{function_name: , path: , last_updated:, documentation: }.\n" "Ensure the response is in valid JSON format only, and does not include `---`." - ) + ), } ] - + user_message = f"api path: {api_path}, last_updated:{frappe.utils.now()}, code:\n{code_snippet}" if not code_snippet: return [] @@ -154,14 +161,27 @@ def generate_documentation_for_api_snippet(api_path:str,code_snippet:str): print("Second JSON Decode Error:", e) return [] + @frappe.whitelist() -def get_documentation_for_api(project_branch: str, file_path: str,block_start: int, block_end: int,endpoint:str,viewer_type:str = 'app'): - code_snippet = get_file_content_from_path(project_branch, file_path,block_start, block_end,viewer_type) +def get_documentation_for_api( + project_branch: str, + file_path: str, + block_start: int, + block_end: int, + endpoint: str, + viewer_type: str = "app", +): + code_snippet = get_file_content_from_path( + project_branch, file_path, block_start, block_end, viewer_type + ) api_path = endpoint return generate_documentation_for_api_snippet(api_path, code_snippet) + @frappe.whitelist() -def save_documentation(project_branch:str,endpoint:str,documentation:str,viewer_type:str = 'app'): +def save_documentation( + project_branch: str, endpoint: str, documentation: str, viewer_type: str = "app" +): # Save the documentation to the project branch # 1. Check for viewer_type app or project # 2. If viewer_type is app, then check the document is already present in Commit Branch Documentation doctype @@ -177,9 +197,12 @@ def save_documentation(project_branch:str,endpoint:str,documentation:str,viewer_ else: save_documentation_for_project_branch(project_branch, endpoint, documentation) -def save_documentation_for_project_branch(project_branch:str,endpoint:str,documentation:str): - doc = frappe.get_doc("Commit Project Branch", project_branch) +def save_documentation_for_project_branch( + project_branch: str, endpoint: str, documentation: str +): + + doc = frappe.get_cached_doc("Commit Project Branch", project_branch) docs = json.loads(doc.documentation) if doc.documentation else {} apis = docs.get("apis", []) @@ -187,26 +210,34 @@ def save_documentation_for_project_branch(project_branch:str,endpoint:str,docume # loop over apis and check if function_name and path matches then update the documentation else create a new dict and append to the documentation found = False for api in apis: - if api.get("function_name") == endpoint.split(".")[-1] and api.get("path") == endpoint: + if ( + api.get("function_name") == endpoint.split(".")[-1] + and api.get("path") == endpoint + ): api["documentation"] = documentation api["last_updated"] = frappe.utils.now() found = True break if not found: - apis.append({ - "function_name": endpoint.split(".")[-1], - "path": endpoint, - "last_updated": frappe.utils.now(), - "documentation": documentation - }) - + apis.append( + { + "function_name": endpoint.split(".")[-1], + "path": endpoint, + "last_updated": frappe.utils.now(), + "documentation": documentation, + } + ) + doc.documentation = json.dumps({"apis": apis}) doc.save() -def save_documentation_for_site_app(project_branch:str,endpoint:str,documentation:str): - if frappe.db.exists("Commit Branch Documentation",project_branch): - doc = frappe.get_doc("Commit Branch Documentation", project_branch) +def save_documentation_for_site_app( + project_branch: str, endpoint: str, documentation: str +): + + if frappe.db.exists("Commit Branch Documentation", project_branch): + doc = frappe.get_cached_doc("Commit Branch Documentation", project_branch) docs = json.loads(doc.documentation) if doc.documentation else {} apis = docs.get("apis", []) @@ -214,28 +245,39 @@ def save_documentation_for_site_app(project_branch:str,endpoint:str,documentatio # loop over apis and check if function_name and path matches then update the documentation else create a new dict and append to the documentation found = False for api in apis: - if api.get("function_name") == endpoint.split(".")[-1] and api.get("path") == endpoint: + if ( + api.get("function_name") == endpoint.split(".")[-1] + and api.get("path") == endpoint + ): api["documentation"] = documentation api["last_updated"] = frappe.utils.now() found = True break if not found: - apis.append({ - "function_name": endpoint.split(".")[-1], - "path": endpoint, - "last_updated": frappe.utils.now(), - "documentation": documentation - }) + apis.append( + { + "function_name": endpoint.split(".")[-1], + "path": endpoint, + "last_updated": frappe.utils.now(), + "documentation": documentation, + } + ) doc.documentation = json.dumps({"apis": apis}) doc.save() else: # Create a new document and append the documentation doc = frappe.new_doc("Commit Branch Documentation") doc.app = project_branch - doc.documentation = json.dumps({"apis": [{ - "function_name": endpoint.split(".")[-1], - "path": endpoint, - "last_updated": frappe.utils.now(), - "documentation": documentation - }]}) - doc.save() \ No newline at end of file + doc.documentation = json.dumps( + { + "apis": [ + { + "function_name": endpoint.split(".")[-1], + "path": endpoint, + "last_updated": frappe.utils.now(), + "documentation": documentation, + } + ] + } + ) + doc.save() diff --git a/commit/api/get_commands.py b/commit/api/get_commands.py index f4d84f6..f4635d3 100644 --- a/commit/api/get_commands.py +++ b/commit/api/get_commands.py @@ -1,19 +1,24 @@ import importlib +import os import sys import traceback -import os + import frappe from frappe.utils.bench_helper import get_app_commands + @frappe.whitelist(allow_guest=True) def get_project_app_commands(app: str, app_path: str = None) -> dict: - ''' - Gets the commands for the app - ''' - if not app_path or app_path == '': + """ + Gets the commands for the app + """ + if not app_path or app_path == "": # Check the permissions of the user if not is_system_manager(): - return frappe.throw('You do not have permission to access this resource', frappe.PermissionError) + return frappe.throw( + "You do not have permission to access this resource", + frappe.PermissionError, + ) return get_site_app_commands(app) else: ret = [] @@ -21,7 +26,7 @@ def get_project_app_commands(app: str, app_path: str = None) -> dict: if app_path: # Add the app's directory to the Python path sys.path.append(app_path) - + app_command_module = importlib.import_module(f"{app}.commands") except ModuleNotFoundError as e: if e.name == f"{app}.commands": @@ -35,26 +40,28 @@ def get_project_app_commands(app: str, app_path: str = None) -> dict: if app_path: # Remove the app's directory from the Python path to avoid side effects sys.path.remove(app_path) - + command_list = [] - if hasattr(app_command_module, 'get_commands') and callable(getattr(app_command_module, 'get_commands')): + if hasattr(app_command_module, "get_commands") and callable( + getattr(app_command_module, "get_commands") + ): commands_from_function = app_command_module.get_commands() if commands_from_function: for command_instance in commands_from_function: - help_text = getattr(command_instance, 'help', 'No help text available') - name = getattr(command_instance, 'name', []) - obj = { - 'name': name, - 'help': help_text - } + help_text = getattr( + command_instance, "help", "No help text available" + ) + name = getattr(command_instance, "name", []) + obj = {"name": name, "help": help_text} command_list.append(obj) return command_list + @frappe.whitelist() def get_site_app_commands(app: str) -> dict: try: app_command_module = importlib.import_module(f"{app}.commands") - # Call get_commands if it is a callable + # Call get_commands if it is a callable except ModuleNotFoundError as e: if e.name == f"{app}.commands": return [] @@ -62,20 +69,18 @@ def get_site_app_commands(app: str) -> dict: return [] command_list = [] - if hasattr(app_command_module, 'commands'): + if hasattr(app_command_module, "commands"): commands_from_function = app_command_module.commands if commands_from_function: for command_instance in commands_from_function: - help_text = getattr(command_instance, 'help', 'No help text available') - name = getattr(command_instance, 'name', []) - obj = { - 'name': name, - 'help': help_text - } + help_text = getattr(command_instance, "help", "No help text available") + name = getattr(command_instance, "name", []) + obj = {"name": name, "help": help_text} command_list.append(obj) return command_list + def is_system_manager(): user = frappe.session.user roles = frappe.get_roles(user) - return 'System Manager' in roles + return "System Manager" in roles diff --git a/commit/api/github.py b/commit/api/github.py index 000b38a..28e8b31 100644 --- a/commit/api/github.py +++ b/commit/api/github.py @@ -2,59 +2,84 @@ import requests -def prepare_headers(access_token=None, type="bearer", accept="application/vnd.github+json"): +def prepare_headers( + access_token=None, type="bearer", accept="application/vnd.github+json" +): return { # "Authorization": type + " " + access_token, "Accept": accept, - "X-GitHub-Api-Version": "2022-11-28" + "X-GitHub-Api-Version": "2022-11-28", } + + def get_user(access_token=None): - ''' + """ Get user details from github - ''' + """ headers = prepare_headers(access_token) response = requests.get("https://api.github.com/user", headers=headers) return response.json() + def get_user_organizations(access_token=None): - ''' + """ Get user organizations from github - ''' + """ headers = prepare_headers(access_token) response = requests.get("https://api.github.com/user/orgs", headers=headers) return response.json() def get_organization_repos(access_token, organization): - ''' + """ Get repositories in an organization from Github - ''' + """ headers = prepare_headers(access_token) - response = requests.get(f"https://api.github.com/orgs/{organization}/repos", headers=headers) + response = requests.get( + f"https://api.github.com/orgs/{organization}/repos", headers=headers + ) return response.json() -def get_file_in_repo(access_token:str, organization:str, repo:str, path: str): - ''' +def get_file_in_repo(access_token: str, organization: str, repo: str, path: str): + """ Get file in a repository from Github - ''' + """ headers = prepare_headers(access_token, accept="application/vnd.github.raw") - response = requests.get(f"https://api.github.com/repos/{organization}/{repo}/contents/{path}", headers=headers) + response = requests.get( + f"https://api.github.com/repos/{organization}/{repo}/contents/{path}", + headers=headers, + ) return response.text -def get_all_files_in_repo(access_token:str, organization:str, repo:str, path:str=''): - ''' + +def get_all_files_in_repo( + access_token: str, organization: str, repo: str, path: str = "" +): + """ Get all files in a repository from Github - ''' + """ # TODO: For every file, we need to store it in the database with the commit hash so that we do not need to call this API again to fetch the same result headers = prepare_headers(access_token) - response = requests.get(f"https://api.github.com/repos/{organization}/{repo}/contents/{path}", headers=headers) + response = requests.get( + f"https://api.github.com/repos/{organization}/{repo}/contents/{path}", + headers=headers, + ) return response.json() -def search_for_file_in_repo(access_token:str, organization:str, repo:str, query:str | None =None, extension: str | None=None, page:int=1, per_page:int=100, accept=None): - ''' +def search_for_file_in_repo( + access_token: str, + organization: str, + repo: str, + query: str | None = None, + extension: str | None = None, + page: int = 1, + per_page: int = 100, + accept=None, +): + """ Search for a file in a repository from Github query examples: 1. "CRM in:file" - searches for keyword CRM in all files @@ -62,7 +87,7 @@ def search_for_file_in_repo(access_token:str, organization:str, repo:str, query: 3. Combined query: "path:erpnext/crm.doctype+CRM in:file" - searches for keyword CRM in all files in path erpnext/crm.doctype Extension and repo will be added to search query automatically - ''' + """ # TODO: This API is expensive to use. We need to store the result based on commit hash and return from our own database headers = prepare_headers(access_token, accept=accept) @@ -70,5 +95,8 @@ def search_for_file_in_repo(access_token:str, organization:str, repo:str, query: query = f"{query}+repo:{organization}/{repo}" if extension: query = f"{query}+extension:{extension}" - response = requests.get(f"https://api.github.com/search/code?q={query}+repo:{organization}/{repo}&page={page}&per_page={per_page}", headers=headers) - return response.json() \ No newline at end of file + response = requests.get( + f"https://api.github.com/search/code?q={query}+repo:{organization}/{repo}&page={page}&per_page={per_page}", + headers=headers, + ) + return response.json() diff --git a/commit/api/link.py b/commit/api/link.py new file mode 100644 index 0000000..e8aaca0 --- /dev/null +++ b/commit/api/link.py @@ -0,0 +1,9 @@ +import frappe + + +@frappe.whitelist() +def get_link_title(doctype, docname): + meta = frappe.get_meta(doctype) + if meta.title_field: + return frappe.get_value(doctype, docname, meta.title_field) + return docname diff --git a/commit/api/meta_data.py b/commit/api/meta_data.py index b657076..c17b68c 100644 --- a/commit/api/meta_data.py +++ b/commit/api/meta_data.py @@ -1,70 +1,73 @@ import frappe + from commit.commit.code_analysis.apis import find_all_occurrences_of_whitelist + @frappe.whitelist() def get_installed_apps(): - ''' - Get all installed apps - 1. Get the installed applications from the Installed Applications doctype - 2. Get the app hooks for each app - 3. Get the app description, publisher, logo, version and git branch - 4. Return the updated apps - ''' - install_app_doc = frappe.get_cached_doc('Installed Applications') - install_apps = install_app_doc.get('installed_applications') + """ + Get all installed apps + 1. Get the installed applications from the Installed Applications doctype + 2. Get the app hooks for each app + 3. Get the app description, publisher, logo, version and git branch + 4. Return the updated apps + """ + install_app_doc = frappe.get_cached_doc("Installed Applications") + install_apps = install_app_doc.get("installed_applications") updated_apps = [] for app in install_apps: - app_name = app.get('app_name') + app_name = app.get("app_name") app_hooks = frappe.get_hooks(app_name=app_name) - app_description = app_hooks.get('app_description') + app_description = app_hooks.get("app_description") if app_description is not None: app_description = app_description[0] - app_publisher = app_hooks.get('app_publisher') + app_publisher = app_hooks.get("app_publisher") if app_publisher is not None: app_publisher = app_publisher[0] - - app_logo_url = app_hooks.get('app_logo_url') or app_hooks.get('app_logo') + + app_logo_url = app_hooks.get("app_logo_url") or app_hooks.get("app_logo") if app_logo_url is not None: app_logo_url = app_logo_url[0] - - app_version = app.get('app_version') - git_branch = app.get('git_branch') + app_version = app.get("app_version") + + git_branch = app.get("git_branch") updated_app = { - 'app_name': app_name, - 'app_publisher': app_publisher, - 'app_description': app_description, - 'app_logo_url': app_logo_url, - 'app_version': app_version, - 'git_branch': git_branch + "app_name": app_name, + "app_publisher": app_publisher, + "app_description": app_description, + "app_logo_url": app_logo_url, + "app_version": app_version, + "git_branch": git_branch, } updated_apps.append(updated_app) return updated_apps + @frappe.whitelist() def get_apis_for_app(app_name: str): - ''' - Gets the Project Branch document with the organization and app name - ''' + """ + Gets the Project Branch document with the organization and app name + """ app_path = frappe.get_app_path(app_name) # remove last part of the path which is the app name - app_path = app_path.rsplit('/', 1)[0] - apis = find_all_occurrences_of_whitelist(app_path,app_name) + app_path = app_path.rsplit("/", 1)[0] + apis = find_all_occurrences_of_whitelist(app_path, app_name) app_hooks = frappe.get_hooks(app_name=app_name) - install_app_doc = frappe.get_cached_doc('Installed Applications') - install_apps = install_app_doc.get('installed_applications') - app = [app for app in install_apps if app.get('app_name') == app_name][0] + install_app_doc = frappe.get_cached_doc("Installed Applications") + install_apps = install_app_doc.get("installed_applications") + app = [app for app in install_apps if app.get("app_name") == app_name][0] - branch_name = app.get('git_branch') + branch_name = app.get("git_branch") return { "apis": apis, "app_name": app_name, "branch_name": branch_name, - } \ No newline at end of file + } diff --git a/commit/api/openapi.py b/commit/api/openapi.py new file mode 100644 index 0000000..60f23bd --- /dev/null +++ b/commit/api/openapi.py @@ -0,0 +1,291 @@ +import json +from collections import Counter + +import frappe + +from commit.commit.code_analysis.apis import find_all_occurrences_of_whitelist + + +def _python_type_to_openapi_type(type_hint: str) -> dict: + """ + Map a simple Python type hint string to an OpenAPI schema. + Falls back to string when unsure. + """ + if not type_hint: + return {"type": "string"} + + normalized = type_hint.strip().lower() + + if normalized in {"int", "integer"}: + return {"type": "integer"} + if normalized in {"float", "decimal"}: + return {"type": "number", "format": "float"} + if normalized in {"bool", "boolean"}: + return {"type": "boolean"} + if normalized in {"list", "tuple", "set"}: + return {"type": "array", "items": {"type": "string"}} + if normalized in {"dict", "mapping"}: + return {"type": "object"} + + return {"type": "string"} + + +def _get_duplicate_api_names(apis: list) -> set: + """Return set of API names that appear more than once (so we can disambiguate summary).""" + names = [api.get("name") or "" for api in apis if api.get("api_path")] + counts = Counter(names) + return {n for n, c in counts.items() if c > 1} + + +def _summary_for_api(api: dict, duplicate_names: set) -> str: + """Unique summary: name, or 'name - (module)' when name is duplicate.""" + name = api.get("name") or api.get("api_path") or "" + if not name: + return api.get("api_path", "") + if name not in duplicate_names: + return name + # Disambiguate with module path (api_path without last segment). Use one separator + # to avoid " - (module)" becoming " - -module-" when tools sanitize for file names. + api_path = api.get("api_path", "") + parts = api_path.rsplit(".", 1) + file_name = parts[0] if len(parts) == 2 else api_path + return f"{name} · {file_name}" + + +def _build_operation_for_api(api: dict, duplicate_names: set | None = None) -> dict: + """ + Build the OpenAPI operation object for a single API (summary, parameters, responses, security). + Returns the operation dict that can be placed under a path and method (get, post, etc.). + """ + duplicate_names = duplicate_names or set() + api_path = api.get("api_path", "") + arguments = api.get("arguments") or [] + documentation = api.get("documentation") or "" + + parameters = [] + for arg in arguments: + name = arg.get("argument") + if not name or name in {"self", "cls"}: + continue + schema = _python_type_to_openapi_type(arg.get("type", "")) + required = arg.get("default", "") == "" + parameters.append( + { + "name": name, + "in": "query", + "required": required, + "schema": schema, + } + ) + + summary = _summary_for_api(api, duplicate_names) + operation = { + "summary": summary, + "description": documentation or "", + "operationId": api_path.replace(".", "_"), + "parameters": parameters, + "responses": { + "200": { + "description": "Successful response", + } + }, + } + if api.get("allow_guest"): + operation["security"] = [] + + return operation + + +def _build_path_item_for_api( + api: dict, duplicate_names: set | None = None +) -> tuple[str, dict]: + """ + Build the OpenAPI path and path-item (method -> operation) for a single API. + Returns (path_string, path_item) where path_item is e.g. {"get": {...}, "post": {...}}. + """ + api_path = api.get("api_path") + if not api_path: + return "", {} + + path = f"/api/method/{api_path}" + request_types = api.get("request_types") or ["GET"] + operation = _build_operation_for_api(api, duplicate_names) + path_item = {} + for method in request_types: + method_lower = (method or "GET").lower() + if method_lower not in path_item: + path_item[method_lower] = dict(operation) + return path, path_item + + +def get_openapi_for_single_api(api: dict) -> dict: + """ + Return the OpenAPI paths object for a single API. + Use this to get the OpenAPI representation of one whitelisted API (e.g. to expose or merge elsewhere). + """ + path, path_item = _build_path_item_for_api(api) + if not path: + return {} + return {path: path_item} + + +def _build_paths_from_apis(apis: list) -> dict: + """ + Build OpenAPI paths from Commit's internal API discovery objects. + One pass to find duplicate API names; summaries become 'name - (module)' only when duplicated. + """ + duplicate_names = _get_duplicate_api_names(apis) + paths: dict = {} + for api in apis: + path, path_item = _build_path_item_for_api(api, duplicate_names) + if not path: + continue + if path not in paths: + paths[path] = {} + for method_lower, operation in path_item.items(): + if method_lower in paths[path]: + continue + paths[path][method_lower] = operation + return paths + + +def _get_apis_from_project_branch(project_branch: str) -> list: + """ + Collect API definitions for a single Commit Project Branch (from stored whitelisted_apis). + """ + branch_doc = frappe.get_cached_doc("Commit Project Branch", project_branch) + apis = ( + json.loads(branch_doc.whitelisted_apis).get("apis", []) + if branch_doc.whitelisted_apis + else [] + ) + documentation = ( + json.loads(branch_doc.documentation).get("apis", []) + if branch_doc.documentation + else [] + ) + for api in apis: + for doc in documentation: + if isinstance(doc, str): + try: + doc = json.loads(doc) + except json.JSONDecodeError: + continue + if doc.get("function_name") == api.get("name") and doc.get( + "path" + ) == api.get("api_path"): + api["documentation"] = doc.get("documentation") + break + return apis + + +def _get_request_base_url() -> str: + """Return the current request's base URL (scheme + host) so the OpenAPI spec has a default server.""" + try: + return frappe.utils.get_url().rstrip("/") + except Exception: + return "https://your-frappe-site.com" + + +def _build_openapi_document( + apis: list, + title: str | None = None, + description: str | None = None, +) -> dict: + """ + Build a minimal OpenAPI 3.0 document from Commit's API discovery data. + """ + site_name = frappe.local.site if getattr(frappe.local, "site", None) else "Commit" + default_title = f"Commit API - {site_name}" + default_description = ( + "Automatically generated OpenAPI definition for Frappe whitelisted methods." + ) + base_url = _get_request_base_url() + paths = _build_paths_from_apis(apis) + + # Ensure version is a string for strict OpenAPI validators (e.g. Postman). + try: + version = frappe.get_hooks().get("app_version", ["0.0.0"]) + version = version[0] if version else "0.0.0" + except Exception: + version = "0.0.0" + if not isinstance(version, str): + version = "0.0.0" + + doc = { + "openapi": "3.0.0", + "info": { + "title": title or default_title, + "version": version, + "description": description or default_description, + }, + "servers": [{"url": base_url, "description": "Frappe site"}], + "paths": paths, + "components": { + "securitySchemes": { + "UserKey": { + "type": "apiKey", + "in": "header", + "name": "Authorization", + "description": "Frappe user API key / token or session cookie.", + } + } + }, + } + # Do not set document-level security so Postman/other tools don't send auth by default. + # Guest endpoints work without it; protected endpoints can add auth in the tool. + return doc + + +@frappe.whitelist(allow_guest=True) +def get_openapi_definition_installed_apps(app_name: str | None = None) -> dict: + """ + Return an OpenAPI 3.0 definition for Installed Apps only. + + - When app_name is provided, only that app's whitelisted APIs are included. + - When app_name is omitted, all installed apps on the current site are included. + + Use this for APIs discovered from apps in Installed Applications. + """ + if not app_name: + frappe.throw("App name is required.") + + app_path = frappe.get_app_path(app_name) + if not app_path: + frappe.throw(f"App {app_name} is not installed on this site.") + root_path = app_path.rsplit("/", 1)[0] + apis = find_all_occurrences_of_whitelist(root_path, app_name) + title = f"{app_name}'s OpenAPI Definition" + + return _build_openapi_document( + apis, + title=title, + description=f"OpenAPI definition for whitelisted methods for {app_name}.", + ) + + +@frappe.whitelist(allow_guest=True) +def get_openapi_definition_project_apps(project_branch: str | None = None) -> dict: + """ + Return an OpenAPI 3.0 definition for Project Apps (Commit Project Branch) only. + + - When project_branch is provided, only that branch's APIs are included. + - When project_branch is omitted, all Commit Project Branch documents on the site are included. + + Use this for APIs from project branches (stored whitelisted_apis). + """ + if not project_branch: + frappe.throw("Project branch is required.") + + if not frappe.db.exists("Commit Project Branch", project_branch): + frappe.throw(f"Project branch {project_branch} does not exist.") + + project_branch_doc = frappe.get_cached_doc("Commit Project Branch", project_branch) + apis = _get_apis_from_project_branch(project_branch) + title = f"{project_branch_doc.app_name}'s OpenAPI Definition" + + return _build_openapi_document( + apis, + title=title, + description=f"OpenAPI definition for whitelisted methods for {project_branch_doc.app_name} ({project_branch_doc.branch_name}).", + ) diff --git a/commit/api/preview.py b/commit/api/preview.py index 8fdf22d..e50f035 100644 --- a/commit/api/preview.py +++ b/commit/api/preview.py @@ -1,30 +1,31 @@ import asyncio import io -from pyppeteer import launch + import frappe from frappe.utils.file_manager import save_file +from pyppeteer import launch + from commit.api.convert_to_webp import convert_to_webp + async def capture_screenshot(url, width=1366, height=800, delay=3): browser = await launch( - headless=True, - handleSIGINT=False, - handleSIGTERM=False, - handleSIGHUP=False + headless=True, handleSIGINT=False, handleSIGTERM=False, handleSIGHUP=False ) page = await browser.newPage() - + await page.setViewport({"width": width, "height": height}) await page.goto(url, {"waitUntil": "load"}) await asyncio.sleep(delay) # Ensure page loads fully - + # ✅ Explicitly return bytes and ensure no file is saved - screenshot_bytes = await page.screenshot({"fullPage": False, "encoding": "binary"}) - + screenshot_bytes = await page.screenshot({"fullPage": False, "encoding": "binary"}) + await browser.close() - + return screenshot_bytes # Return raw image data + def save_preview_screenshot(url, doctype, docname, field): try: loop = asyncio.get_running_loop() @@ -38,21 +39,23 @@ def save_preview_screenshot(url, doctype, docname, field): # ✅ Correct way: Wrap bytes in BytesIO screenshot_io = io.BytesIO(screenshot_bytes) - file_doc = frappe.get_doc({ - "doctype": "File", - "file_name": docname + "_" + "preview.png", - "attached_to_doctype": doctype, - "attached_to_name": docname, - "attached_to_field": field, - "is_private": 1, - "content": screenshot_io.getvalue() - }) + file_doc = frappe.get_cached_doc( + { + "doctype": "File", + "file_name": docname + "_" + "preview.png", + "attached_to_doctype": doctype, + "attached_to_name": docname, + "attached_to_field": field, + "is_private": 1, + "content": screenshot_io.getvalue(), + } + ) file_doc.save() # Convert to WebP file_url = convert_to_webp(file_doc.file_url, file_doc) # Update the document with the preview file URL - doc = frappe.get_doc(doctype, docname) + doc = frappe.get_cached_doc(doctype, docname) doc.set(field, file_url) doc.save() diff --git a/commit/api/search.py b/commit/api/search.py index 1d0b4ba..17f22e4 100644 --- a/commit/api/search.py +++ b/commit/api/search.py @@ -1,27 +1,28 @@ import frappe -from frappe.desk.search import search_widget, build_for_autosuggest +from frappe.desk.search import build_for_autosuggest, search_widget + # this is called by the Link Field @frappe.whitelist() def search_link( - doctype, - txt, - query=None, - filters=None, - page_length=20, + doctype, + txt, + query=None, + filters=None, + page_length=20, start=0, - searchfield=None, - reference_doctype=None, - ignore_user_permissions=False, + searchfield=None, + reference_doctype=None, + ignore_user_permissions=False, ): - results = search_widget( - doctype, - txt.strip(), - query, - searchfield=searchfield, - page_length=page_length, - filters=filters, - reference_doctype=reference_doctype, - ignore_user_permissions=ignore_user_permissions, - ) - return build_for_autosuggest(results, doctype=doctype) \ No newline at end of file + results = search_widget( + doctype, + txt.strip(), + query, + searchfield=searchfield, + page_length=page_length, + filters=filters, + reference_doctype=reference_doctype, + ignore_user_permissions=ignore_user_permissions, + ) + return build_for_autosuggest(results, doctype=doctype) diff --git a/commit/commit/code_analysis/apis.py b/commit/commit/code_analysis/apis.py index c95ca96..f9ebafd 100644 --- a/commit/commit/code_analysis/apis.py +++ b/commit/commit/code_analysis/apis.py @@ -1,18 +1,21 @@ -import os import ast -import frappe import json +import os + +import frappe other_decorators = [ - '@cache_source', - '@frappe.validate_and_sanitize_search_inputs', - '@rate_limit' + "@cache_source", + "@frappe.validate_and_sanitize_search_inputs", + "@rate_limit", ] + + def find_all_occurrences_of_whitelist(path: str, app_name: str): - ''' - Find all occurences of @frappe.whitelist in the app repository - These should only be in .py files - ''' + """ + Find all occurences of @frappe.whitelist in the app repository + These should only be in .py files + """ # Get list of all .py files in the app py_files = get_py_files(path, app_name) api_count = 0 @@ -20,30 +23,106 @@ def find_all_occurrences_of_whitelist(path: str, app_name: str): api_details = [] # For each file, check if @frappe.whitelist is present for file in py_files: - file_content = open(file, 'r').read() + file_content = open(file, "r").read() # @frappe.whitelist can be mentioned multiple times in a file # So, we need to find all occurrences # We can use the count() method to find the number of occurrences # If the count is greater than 0, then the string is present - no_of_occurrences = file_content.count('@frappe.whitelist') + no_of_occurrences = file_content.count("@frappe.whitelist") if no_of_occurrences > 0: api_count += no_of_occurrences file_count += 1 ## Comment out later # if file.endswith('party.py'): - indexes,line_nos,no_of_occurrences = find_indexes_of_whitelist(file_content, no_of_occurrences) + result = find_indexes_of_whitelist(file_content, no_of_occurrences) + indexes, line_nos = result[0], result[1] + no_of_occurrences = result[2] + ast_names = result[3] if len(result) > 3 else None + ast_def_indexes = result[4] if len(result) > 4 else None api_count += no_of_occurrences - apis = get_api_details(app_name, file, file_content, indexes,line_nos, path) + apis = get_api_details( + app_name, + file, + file_content, + indexes, + line_nos, + path, + ast_names, + ast_def_indexes, + ) api_details.extend(apis) - + return api_details + +def _find_whitelist_indexes_via_ast(file_content: str): + """ + Find all @frappe.whitelist decorator positions using AST. + Returns (indexes, line_nos, function_names, def_indexes) or None if parse fails. + This is order-independent and not confused by strings/comments. + Uses AST-derived function names and def positions so multi-line signatures + and "def " in comments do not cause missed APIs. + """ + try: + tree = ast.parse(file_content) + except SyntaxError: + return None + lines = file_content.split("\n") + results = [] # (decorator_index, line_no, function_name, def_index) + for node in ast.walk(tree): + if not isinstance(node, ast.FunctionDef): + continue + decorators = get_decorators(node) + if "whitelist" not in decorators: + continue + for dec in node.decorator_list: + name = get_decorator_name(dec) + if name == "whitelist": + lineno = getattr(dec, "lineno", node.lineno) + if lineno < 1 or lineno > len(lines): + break + line_start = sum(len(l) + 1 for l in lines[: lineno - 1]) + line_content = lines[lineno - 1] + pos_in_line = line_content.find("@frappe.whitelist") + if pos_in_line >= 0: + decorator_index = line_start + pos_in_line + # def_index: start of "def name" on the function's line + def_lineno = node.lineno + def_line_start = sum(len(l) + 1 for l in lines[: def_lineno - 1]) + def_line_content = lines[def_lineno - 1] + def_pos_in_line = def_line_content.find("def ") + def_index = ( + def_line_start + def_pos_in_line + if def_pos_in_line >= 0 + else decorator_index + ) + results.append((decorator_index, lineno, node.name, def_index)) + break + if not results: + return None + # Keep source order (ast.walk order is not guaranteed) + results.sort(key=lambda r: r[0]) + return ( + [r[0] for r in results], + [r[1] for r in results], + [r[2] for r in results], + [r[3] for r in results], + ) + + def find_indexes_of_whitelist(file_content: str, count: int): - ''' + """ Find indexes of @frappe.whitelist in the file content, ensuring it's not commented out or inside a string. - ''' + Prefers AST-based discovery (order-independent); falls back to + string scan when AST parse fails (e.g. syntax error). + """ + ast_result = _find_whitelist_indexes_via_ast(file_content) + if ast_result is not None: + indexes, line_nos, ast_names, ast_def_indexes = ast_result + return indexes, line_nos, count - len(indexes), ast_names, ast_def_indexes + def is_in_string_or_comment(file_content, index): # State variables in_single_quote = False @@ -55,9 +134,9 @@ def is_in_string_or_comment(file_content, index): i = 0 while i < index: char = file_content[i] - + # Handle triple single-quoted strings - if file_content[i:i+3] == "'''" and not in_double_quote: + if file_content[i : i + 3] == "'''" and not in_double_quote: if in_triple_single_quote: in_triple_single_quote = False i += 2 @@ -65,7 +144,7 @@ def is_in_string_or_comment(file_content, index): in_triple_single_quote = True i += 2 # Handle triple double-quoted strings - elif file_content[i:i+3] == '"""' and not in_single_quote: + elif file_content[i : i + 3] == '"""' and not in_single_quote: if in_triple_double_quote: in_triple_double_quote = False i += 2 @@ -73,91 +152,167 @@ def is_in_string_or_comment(file_content, index): in_triple_double_quote = True i += 2 # Handle single-quoted strings - elif char == "'" and not in_double_quote and not in_triple_single_quote and not in_triple_double_quote: + elif ( + char == "'" + and not in_double_quote + and not in_triple_single_quote + and not in_triple_double_quote + ): in_single_quote = not in_single_quote # Handle double-quoted strings - elif char == '"' and not in_single_quote and not in_triple_single_quote and not in_triple_double_quote: + elif ( + char == '"' + and not in_single_quote + and not in_triple_single_quote + and not in_triple_double_quote + ): in_double_quote = not in_double_quote # Handle single-line comments - elif char == '#' and not in_single_quote and not in_double_quote and not in_triple_single_quote and not in_triple_double_quote: + elif ( + char == "#" + and not in_single_quote + and not in_double_quote + and not in_triple_single_quote + and not in_triple_double_quote + ): in_comment = True # Handle end of line for single-line comments - elif char == '\n': + elif char == "\n": in_comment = False - + i += 1 - return in_single_quote or in_double_quote or in_comment or in_triple_single_quote or in_triple_double_quote + return ( + in_single_quote + or in_double_quote + or in_comment + or in_triple_single_quote + or in_triple_double_quote + ) indexes = [] line_nos = [] actual_count = count - + start = 0 while actual_count > 0: - index = file_content.find('@frappe.whitelist', start) + index = file_content.find("@frappe.whitelist", start) if index == -1: break if not is_in_string_or_comment(file_content, index): indexes.append(index) - line_nos.append(file_content.count('\n', 0, index) + 1) + line_nos.append(file_content.count("\n", 0, index) + 1) actual_count -= 1 - start = index + len('@frappe.whitelist') - - return indexes, line_nos, actual_count + start = index + len("@frappe.whitelist") -def get_api_details(app_name, file, file_content: str, indexes: list,line_nos:list, path: str): - ''' + return indexes, line_nos, actual_count, None, None + + +def get_api_details( + app_name, + file, + file_content: str, + indexes: list, + line_nos: list, + path: str, + ast_names=None, + ast_def_indexes=None, +): + """ Get details of the API - ''' + """ apis = [] - for index in indexes: - whitelist_details = get_whitelist_details(file_content, index) - api_details = get_api_name(file_content, index) - other_decorators = get_other_decorators(file_content, index, api_details.get('def_index')) - obj = { - **api_details, - **whitelist_details, - 'other_decorators': other_decorators, - 'index': index, - 'block_start': line_nos[indexes.index(index)], - 'block_end': find_function_end_lines(file_content,api_details.get('name','')), - 'file': file, - 'api_path': file.replace(path, '').replace('\\', '/').replace('.py', '').replace('/', '.')[1:] + '.' + api_details.get('name') - } - documentation, last_updated, is_published, published_on, publish_by, publish_id,published_route = get_documentation_from_branch_documentation(app_name, obj.get('name'), obj.get('api_path')) - obj['documentation'] = documentation - obj['last_updated'] = last_updated - obj['is_published'] = is_published - obj['published_on'] = published_on - obj['publish_by'] = publish_by - obj['publish_id'] = publish_id - obj['published_route'] = published_route - apis.append(obj) - + for i, index in enumerate(indexes): + try: + whitelist_details = get_whitelist_details(file_content, index) + use_ast = ( + ast_names is not None + and ast_def_indexes is not None + and i < len(ast_names) + and i < len(ast_def_indexes) + ) + if use_ast: + api_name = ast_names[i] + def_index = ast_def_indexes[i] + api_details = get_api_name(file_content, index, def_index=def_index) + api_details["name"] = api_name + api_details["def_index"] = def_index + else: + api_details = get_api_name(file_content, index) + if not api_details.get("name"): + continue + def_idx = api_details.get("def_index", -1) + search_end = ( + def_idx + if isinstance(def_idx, int) and def_idx >= 0 + else len(file_content) + ) + other_decorators = get_other_decorators(file_content, index, search_end) + obj = { + **api_details, + **whitelist_details, + "other_decorators": other_decorators, + "index": index, + "block_start": line_nos[i], + "block_end": find_function_end_lines( + file_content, api_details.get("name", "") + ), + "file": file, + "api_path": file.replace(path, "") + .replace("\\", "/") + .replace(".py", "") + .replace("/", ".")[1:] + + "." + + api_details.get("name"), + } + ( + documentation, + last_updated, + is_published, + published_on, + publish_by, + publish_id, + published_route, + ) = get_documentation_from_branch_documentation( + app_name, obj.get("name"), obj.get("api_path") + ) + obj["documentation"] = documentation + obj["last_updated"] = last_updated + obj["is_published"] = is_published + obj["published_on"] = published_on + obj["publish_by"] = publish_by + obj["publish_id"] = publish_id + obj["published_route"] = published_route + apis.append(obj) + except Exception: + frappe.log_error( + f"Commit API discovery: skipped API at index {index} in {file}", + "Commit API Discovery", + ) return apis + def get_other_decorators(file_content: str, index: int, def_index: int): - ''' - See if other decorators are present in between the @frappe.whitelist decorator and the def - ''' + """ + See if other decorators are present in between the @frappe.whitelist decorator and the def + """ decorators = [] for decorator in other_decorators: decorator_index = file_content.find(decorator, index, def_index) if decorator_index != -1: decorators.append(decorator) - + return decorators -def get_whitelist_details(file_content: str, index: int): - ''' +def get_whitelist_details(file_content: str, index: int): + """ Get details of the @frappe.whitelist decorator The index is the index of the first occurrence of @frappe.whitelist We need to find the first occurrence of ")" after the index - ''' - whitelist_end_index = file_content.find(')', index) - whitelisted_content = file_content[index:whitelist_end_index + 1] + """ + whitelist_end_index = file_content.find(")", index) + whitelisted_content = file_content[index : whitelist_end_index + 1] if "(" in whitelisted_content and ")" in whitelisted_content: args = whitelisted_content.split("(")[1].split(")")[0].split(",") else: @@ -167,65 +322,128 @@ def get_whitelist_details(file_content: str, index: int): allow_guest = False for arg in args: if "methods" in arg: - request_types = arg.split("=")[1].replace("[", "").replace("]", "").replace('"', '').replace("'", "").split(",") - + request_types = ( + arg.split("=")[1] + .replace("[", "") + .replace("]", "") + .replace('"', "") + .replace("'", "") + .split(",") + ) + if "xss_safe" in arg: xss_safe = arg.split("=")[1].strip() == "True" - + if "allow_guest" in arg: allow_guest = arg.split("=")[1].strip() == "True" - + return { "request_types": request_types, "xss_safe": xss_safe, - "allow_guest": allow_guest + "allow_guest": allow_guest, } -def get_api_name(file_content: str, index: int): - ''' - Get name of the API. - To do this, we need to find the first occurrence of "def api_name" after the index - ''' - api_name = '' - # Find the first occurrence of "def" after the index - def_index = file_content.find('def ', index) - # Find occurrence of ":" after the def_index - colon_index = file_content.find('):', def_index) +def _find_def_at_line_start(file_content: str, index: int): + """Find next "def " that starts a line (after newline or start of file). Avoids matching "def " in comments.""" + start = index + while True: + def_index = file_content.find("def ", start) + if def_index == -1: + return -1 + if def_index == 0 or file_content[def_index - 1] == "\n": + return def_index + start = def_index + 1 + - # Get the string between def_index and colon_index - api_def = file_content[def_index:colon_index+1].replace('\n', '').replace('\t', '') +def _find_signature_end(file_content: str, def_index: int): + """Find the "):" that closes the function signature. Prefers ) followed by newline or : to avoid type hints.""" + pos = def_index + while True: + pos = file_content.find("):", pos) + if pos == -1: + return -1 + next_char = file_content[pos + 2] if pos + 2 < len(file_content) else "\n" + if next_char in ("\n", ":"): + return pos + pos += 1 - # api_def is of the form "def api_name(self, arg1, arg2, ...)" - # We need to get the api_name. To do this, we can remove the "def " first - api_name_with_params = api_def.replace('def ', '') +def get_api_name(file_content: str, index: int, def_index: int = None): + """ + Get name of the API. + Finds the function definition after the decorator. When def_index is provided (from AST), uses it. + Otherwise finds "def " at line start only to avoid matching comments. + """ + api_name = "" + if def_index is None: + def_index = _find_def_at_line_start(file_content, index) + if def_index == -1: + return {"name": "", "arguments": [], "def": "", "def_index": -1} + colon_index = _find_signature_end(file_content, def_index) + if colon_index == -1: + return {"name": "", "arguments": [], "def": "", "def_index": def_index} + api_def = ( + file_content[def_index : colon_index + 1].replace("\n", "").replace("\t", "") + ) + api_name_with_params = api_def.replace("def ", "", 1) api_name = extract_name_from_def(api_name_with_params) arguments = extract_arguments_from_def(api_name_with_params) - - - return { - 'name': api_name, - 'arguments': arguments, - 'def': api_def, - 'def_index': def_index, + "name": api_name, + "arguments": arguments, + "def": api_def, + "def_index": def_index, } + def extract_name_from_def(api_def: str): - ''' + """ Extract name from def - ''' + """ return api_def.split("(")[0].strip() + +def _split_params_by_comma(params_str: str) -> list: + """ + Split parameter string by top-level commas, ignoring commas inside [], (), {}. + """ + parts = [] + current = [] + open_brackets = [] # stack of opening bracket chars + bracket_pairs = {"[": "]", "(": ")", "{": "}"} + i = 0 + while i < len(params_str): + c = params_str[i] + if c in bracket_pairs: + open_brackets.append(c) + current.append(c) + i += 1 + elif open_brackets and c == bracket_pairs[open_brackets[-1]]: + open_brackets.pop() + current.append(c) + i += 1 + elif c == "," and not open_brackets: + parts.append("".join(current).strip()) + current = [] + i += 1 + else: + current.append(c) + i += 1 + if current: + parts.append("".join(current).strip()) + return parts + + def extract_arguments_from_def(api_def: str): - ''' + """ Extract arguments from def - ''' + """ if "(" not in api_def or ")" not in api_def: arguments_with_types_defaults = [] else: - arguments_with_types_defaults = api_def.split("(")[1].split(")")[0].split(",") + params_str = api_def.split("(")[1].split(")")[0] + arguments_with_types_defaults = _split_params_by_comma(params_str) arguments = [] for arg in arguments_with_types_defaults: @@ -234,33 +452,33 @@ def extract_arguments_from_def(api_def: str): argument = "" type = "" if "=" in argument_with_types_default: - default_split = argument_with_types_default.split("=") - default = default_split[1].strip().replace('"', '').replace("'", "") + default_split = argument_with_types_default.split("=", 1) + default = default_split[1].strip().replace('"', "").replace("'", "") argument = default_split[0].strip() else: argument = argument_with_types_default if ":" in argument: - type = argument.split(":")[1].strip() - argument = argument.split(":")[0].strip() - arguments.append({ - "argument": argument, - "type": type, - "default": default - }) + name_type = argument.split(":", 1) + argument = name_type[0].strip() + type = name_type[1].strip() + arguments.append({"argument": argument, "type": type, "default": default}) return arguments + + def get_py_files(path: str, app_name: str): - ''' + """ Get list of all .py files in the app - ''' + """ py_files = [] for root, dirs, files in os.walk(os.path.join(path, app_name)): for file in files: - if file.endswith('.py'): + if file.endswith(".py"): py_files.append(os.path.join(root, file)) return py_files -def find_function_end_lines(source_code: str,function_name:str): + +def find_function_end_lines(source_code: str, function_name: str): tree = ast.parse(source_code) @@ -269,11 +487,12 @@ def find_function_end_lines(source_code: str,function_name:str): for node in ast.walk(tree): if isinstance(node, ast.FunctionDef): decorators = get_decorators(node) - if 'whitelist' in decorators: + if "whitelist" in decorators: end_line = node.end_lineno function_end_lines[node.name] = end_line - return function_end_lines.get(function_name,0) + return function_end_lines.get(function_name, 0) + def get_decorator_name(node): if isinstance(node, ast.Call): @@ -286,6 +505,7 @@ def get_decorator_name(node): else: return None + def get_decorators(node): decorators = [] for decorator in node.decorator_list: @@ -294,32 +514,48 @@ def get_decorators(node): decorators.append(decorator_name) return decorators -def get_documentation_from_branch_documentation(app_name:str, name: str, api_path: str): - ''' + +def get_documentation_from_branch_documentation( + app_name: str, name: str, api_path: str +): + """ Get documentation from the Commit Branch Documentation - ''' - if frappe.db.exists('Commit Branch Documentation',app_name): - branch_documentation = frappe.get_doc('Commit Branch Documentation', app_name) - docs = json.loads(branch_documentation.documentation) if branch_documentation.documentation else {} + """ + if frappe.db.exists("Commit Branch Documentation", app_name): + branch_documentation = frappe.get_cached_doc( + "Commit Branch Documentation", app_name + ) + docs = ( + json.loads(branch_documentation.documentation) + if branch_documentation.documentation + else {} + ) apis = docs.get("apis", []) - documentation = '' - last_updated = '' - is_published = '' - published_on = '' - publish_by = '' - publish_id = '' - published_route = '' + documentation = "" + last_updated = "" + is_published = "" + published_on = "" + publish_by = "" + publish_id = "" + published_route = "" for api in apis: if api.get("function_name") == name and api.get("path") == api_path: documentation = api.get("documentation") last_updated = api.get("last_updated") - is_published = api.get("is_published",0) + is_published = api.get("is_published", 0) published_on = api.get("published_on", None) publish_by = api.get("publish_by", None) publish_id = api.get("publish_id", None) published_route = api.get("published_route", None) break - return documentation, last_updated, is_published, published_on, publish_by, publish_id, published_route + return ( + documentation, + last_updated, + is_published, + published_on, + publish_by, + publish_id, + published_route, + ) else: - return '', '', '', '', '', '', '' - \ No newline at end of file + return "", "", "", "", "", "", "" diff --git a/commit/commit/code_analysis/doctypes.py b/commit/commit/code_analysis/doctypes.py index bc70691..e6e378a 100644 --- a/commit/commit/code_analysis/doctypes.py +++ b/commit/commit/code_analysis/doctypes.py @@ -1,50 +1,55 @@ +import json import os + from commit.commit.code_analysis.utils import get_module_path, parse_module_name -import json + def get_doctypes_in_module(path: str, app_name: str, module: str): - ''' + """ Get list of doctypes in a module - ''' + """ doctype_names = [] module_path = get_module_path(path, app_name, module) - doctype_folder_path = os.path.join(module_path, 'doctype') + doctype_folder_path = os.path.join(module_path, "doctype") does_module_have_doctypes = os.path.isdir(doctype_folder_path) if does_module_have_doctypes: # Since the doctype folder exists - find all .json files within the folders (only one level deep) and return the file contents for dir in os.listdir(doctype_folder_path): # doctype .json files have the same name as the folder they are in - doctype_file_path = os.path.join(doctype_folder_path, dir, dir + '.json') + doctype_file_path = os.path.join(doctype_folder_path, dir, dir + ".json") if os.path.isfile(doctype_file_path): - doctype_file = open(doctype_file_path, 'r') + doctype_file = open(doctype_file_path, "r") doctype_json = json.loads(doctype_file.read()) # doctypes_list.append(doctype_json) - doctype_names.append(doctype_json.get( - 'name' - )) - + doctype_names.append(doctype_json.get("name")) + return { - 'module': module, + "module": module, # 'doctypes': doctypes_list, - 'doctype_names': doctype_names, - 'number_of_doctypes': len(doctype_names) + "doctype_names": doctype_names, + "number_of_doctypes": len(doctype_names), } -def get_doctype_json(path: str, app_name: str, module:str, doctype: str): + +def get_doctype_json(path: str, app_name: str, module: str, doctype: str): module_path = get_module_path(path, app_name, module) - module_doctypes_folder_path = os.path.join(module_path, 'doctype') + module_doctypes_folder_path = os.path.join(module_path, "doctype") does_module_have_doctypes = os.path.isdir(module_doctypes_folder_path) if does_module_have_doctypes: parsed_doctype_name = parse_module_name(doctype) - doctype_folder_path = os.path.join(module_doctypes_folder_path, parsed_doctype_name) + doctype_folder_path = os.path.join( + module_doctypes_folder_path, parsed_doctype_name + ) does_doctype_folder_exist = os.path.isdir(doctype_folder_path) if does_doctype_folder_exist: - doctype_file_path = os.path.join(doctype_folder_path, parsed_doctype_name + '.json') + doctype_file_path = os.path.join( + doctype_folder_path, parsed_doctype_name + ".json" + ) if os.path.isfile(doctype_file_path): - doctype_file = open(doctype_file_path, 'r') + doctype_file = open(doctype_file_path, "r") doctype_json = json.loads(doctype_file.read()) return doctype_json - - return None \ No newline at end of file + + return None diff --git a/commit/commit/code_analysis/schema_builder.py b/commit/commit/code_analysis/schema_builder.py index b2ef681..c0cceb5 100644 --- a/commit/commit/code_analysis/schema_builder.py +++ b/commit/commit/code_analysis/schema_builder.py @@ -1,69 +1,75 @@ -import os import json +import os + +DISALLOWED_FIELD_TYPES = [ + "Section Break", + "Tab Break", + "Fold", + "Column Break", + "Heading", + "HTML", + "Image", + "Icon", + "Button", +] +LINK_FIELD_TYPES = ["Link", "Table", "Table MultiSelect"] -DISALLOWED_FIELD_TYPES = ['Section Break', 'Tab Break', 'Fold', 'Column Break', 'Heading', 'HTML', 'Image', 'Icon', 'Button'] -LINK_FIELD_TYPES = ['Link', 'Table', 'Table MultiSelect'] def get_schema_from_doctypes_json(doctypes_json: dict): - ''' + """ Parse doctype file - ''' + """ tables = [] relationships = [] - doctype_names = doctypes_json.get('doctype_names') - doctype_jsons = doctypes_json.get('doctypes') + doctype_names = doctypes_json.get("doctype_names") + doctype_jsons = doctypes_json.get("doctypes") for doctype_json in doctype_jsons: - doctype_name = doctype_json.get('name') + doctype_name = doctype_json.get("name") if doctype_name: - columns = [{ - 'name': 'ID', - 'id': 'name', - 'format': 'Data', - }] + columns = [ + { + "name": "ID", + "id": "name", + "format": "Data", + } + ] # dynamic_links = [] - for field in doctype_json.get('fields'): - fieldname = field.get('fieldname') - fieldtype = field.get('fieldtype') + for field in doctype_json.get("fields"): + fieldname = field.get("fieldname") + fieldtype = field.get("fieldtype") if fieldtype not in DISALLOWED_FIELD_TYPES: column = { - 'name': field.get('label', fieldname), - 'id': fieldname, - 'format': fieldtype, - 'is_custom_field': field.get('is_custom_field') or False, + "name": field.get("label", fieldname), + "id": fieldname, + "format": fieldtype, + "is_custom_field": field.get("is_custom_field") or False, } columns.append(column) - + if fieldtype in LINK_FIELD_TYPES: - if field.get('options') in doctype_names: + if field.get("options") in doctype_names: relationship = { - 'id': doctype_name + "_" + fieldname, - 'source_table_name': doctype_name, - 'source_column_name': fieldname, - 'target_table_name': field.get('options'), - 'target_column_name': 'name', + "id": doctype_name + "_" + fieldname, + "source_table_name": doctype_name, + "source_column_name": fieldname, + "target_table_name": field.get("options"), + "target_column_name": "name", } relationships.append(relationship) table = { - 'name': doctype_name, - 'id': doctype_name, - 'module': doctype_json.get('module'), - 'istable': doctype_json.get('istable'), - 'columns': columns, + "name": doctype_name, + "id": doctype_name, + "module": doctype_json.get("module"), + "istable": doctype_json.get("istable"), + "columns": columns, } tables.append(table) - + return { - 'tables': tables, - 'relationships': relationships, + "tables": tables, + "relationships": relationships, } - - - - - - - diff --git a/commit/commit/code_analysis/utils.py b/commit/commit/code_analysis/utils.py index a64c886..4225b7d 100644 --- a/commit/commit/code_analysis/utils.py +++ b/commit/commit/code_analysis/utils.py @@ -1,14 +1,17 @@ import os + + def get_module_path(path: str, app_name: str, module_name: str): - ''' + """ Get path to modules directory - ''' + """ parsed_module_name = parse_module_name(module_name) modules_path = os.path.join(path, app_name, parsed_module_name) return modules_path + def parse_module_name(module_name: str): - ''' + """ Parse module name - ''' - return module_name.replace('-', '_').replace(' ', '_').lower() \ No newline at end of file + """ + return module_name.replace("-", "_").replace(" ", "_").lower() diff --git a/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.json b/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.json index a09a825..fbc1698 100644 --- a/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.json +++ b/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.json @@ -49,4 +49,4 @@ "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.py b/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.py index c84c245..c800fae 100644 --- a/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.py +++ b/commit/commit/doctype/commit_branch_documentation/commit_branch_documentation.py @@ -6,4 +6,4 @@ class CommitBranchDocumentation(Document): - pass + pass diff --git a/commit/commit/doctype/commit_branch_documentation/test_commit_branch_documentation.py b/commit/commit/doctype/commit_branch_documentation/test_commit_branch_documentation.py index cc8937a..d9bcf65 100644 --- a/commit/commit/doctype/commit_branch_documentation/test_commit_branch_documentation.py +++ b/commit/commit/doctype/commit_branch_documentation/test_commit_branch_documentation.py @@ -6,4 +6,4 @@ class TestCommitBranchDocumentation(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/commit_docs/commit_docs.json b/commit/commit/doctype/commit_docs/commit_docs.json index 4d0c18d..e341d43 100644 --- a/commit/commit/doctype/commit_docs/commit_docs.json +++ b/commit/commit/doctype/commit_docs/commit_docs.json @@ -207,4 +207,4 @@ "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_docs/commit_docs.py b/commit/commit/doctype/commit_docs/commit_docs.py index 0168b4a..704c5eb 100644 --- a/commit/commit/doctype/commit_docs/commit_docs.py +++ b/commit/commit/doctype/commit_docs/commit_docs.py @@ -1,248 +1,280 @@ # Copyright (c) 2024, The Commit Company and contributors # For license information, please see license.txt +import json + import frappe from frappe.model.document import Document -from commit.api.preview import save_preview_screenshot + from commit.api.convert_to_webp import save_webp_image -import json +from commit.api.preview import save_preview_screenshot + + class CommitDocs(Document): - def before_insert(self): - ''' - Validate the Document - # 1. Check if the Route is Unique - ''' - if frappe.db.exists('Commit Docs',{'route':self.route}): - frappe.throw('Route Already Exists') - - def validate(self): - # 2. Loop Over through the Navbar Items and check there should be only one is Primary Button - primary_button_count = 0 - for navbar_item in self.navbar_items: - if navbar_item.is_primary_button: - primary_button_count += 1 - if primary_button_count > 1: - frappe.throw('Only One Primary Button is Allowed') - break - def before_save(self): - # This is to save the preview image of the first page of the commit docs - # This is done to show the preview image in the commit docs dashboard - # This is done using the async function to capture the screenshot - # The function is called using the frappe.enqueue method - if self.sidebar: - first = self.sidebar[0].docs_page - domain = frappe.utils.get_url() - if first: - docs_url = f'{domain}/commit-docs/{self.route}/{first}' - frappe.enqueue(method=save_preview_screenshot, url=docs_url,doctype=self.doctype,docname=self.name,field='preview_image') - - old_doc = self.get_doc_before_save() - if old_doc: - if old_doc.light_mode_logo != self.light_mode_logo: - frappe.enqueue(method=save_webp_image,doctype=self.doctype,docname=self.name,image_field='light_mode_logo') - if old_doc.night_mode_logo != self.night_mode_logo: - frappe.enqueue(method=save_webp_image,doctype=self.doctype,docname=self.name,image_field='dark_mode_logo') + def before_insert(self): + """ + Validate the Document + # 1. Check if the Route is Unique + """ + if frappe.db.exists("Commit Docs", {"route": self.route}): + frappe.throw("Route Already Exists") + + def validate(self): + # 2. Loop Over through the Navbar Items and check there should be only one is Primary Button + primary_button_count = 0 + for navbar_item in self.navbar_items: + if navbar_item.is_primary_button: + primary_button_count += 1 + if primary_button_count > 1: + frappe.throw("Only One Primary Button is Allowed") + break + + def before_save(self): + # This is to save the preview image of the first page of the commit docs + # This is done to show the preview image in the commit docs dashboard + # This is done using the async function to capture the screenshot + # The function is called using the frappe.enqueue method + if self.sidebar: + first = self.sidebar[0].docs_page + domain = frappe.utils.get_url() + if first: + docs_url = f"{domain}/commit-docs/{self.route}/{first}" + frappe.enqueue( + method=save_preview_screenshot, + url=docs_url, + doctype=self.doctype, + docname=self.name, + field="preview_image", + ) + + old_doc = self.get_doc_before_save() + if old_doc: + if old_doc.light_mode_logo != self.light_mode_logo: + frappe.enqueue( + method=save_webp_image, + doctype=self.doctype, + docname=self.name, + image_field="light_mode_logo", + ) + if old_doc.night_mode_logo != self.night_mode_logo: + frappe.enqueue( + method=save_webp_image, + doctype=self.doctype, + docname=self.name, + image_field="dark_mode_logo", + ) @frappe.whitelist() -def get_docs_sidebar_parent_labels(id:str): - ''' - Get the Parent Labels List of the Sidebar from Commit Docs - ''' +def get_docs_sidebar_parent_labels(id: str): + """ + Get the Parent Labels List of the Sidebar from Commit Docs + """ + + # Get the Commit Docs Document + commit_docs = frappe.get_cached_doc("Commit Docs", id) - # Get the Commit Docs Document - commit_docs = frappe.get_doc('Commit Docs', id) + parent_labels = [] - parent_labels = [] + for sidebar in commit_docs.sidebar: + parent_labels.append(sidebar.parent_label) - for sidebar in commit_docs.sidebar: - parent_labels.append(sidebar.parent_label) + parent_labels = list(set(parent_labels)) - parent_labels = list(set(parent_labels)) + parent_labels_obj = [] + for label in parent_labels: + parent_labels_obj.append({"label": label, "value": label}) - parent_labels_obj = [] - for label in parent_labels: - parent_labels_obj.append({ - 'label': label, - 'value': label - }) + return parent_labels_obj - return parent_labels_obj @frappe.whitelist() def get_all_commit_docs_detail(): - ''' - Get the All Commit Docs Details which are Published - # 1. Get the Commit Docs Document from the route - # 2. Check if the Commit Docs Document Published - # 3. Return the Commit Docs Document - # 4. Get The Sidebar Items for the Commit Docs - # 5. Return the Sidebar Items - ''' - - # Get All the Commit Docs which are Published - all_commit_docs = frappe.get_all('Commit Docs',{'published':1},'name') + """ + Get the All Commit Docs Details which are Published + # 1. Get the Commit Docs Document from the route + # 2. Check if the Commit Docs Document Published + # 3. Return the Commit Docs Document + # 4. Get The Sidebar Items for the Commit Docs + # 5. Return the Sidebar Items + """ - # Maintain the Commit Docs Object - commit_docs_obj = {} + # Get All the Commit Docs which are Published + all_commit_docs = frappe.get_all("Commit Docs", {"published": 1}, "name") - for commit_docs in all_commit_docs: - commit_docs = frappe.get_doc('Commit Docs',commit_docs.name).as_dict() + # Maintain the Commit Docs Object + commit_docs_obj = {} - parse_doc = parse_commit_docs(commit_docs) + for commit_docs in all_commit_docs: + commit_docs = frappe.get_cached_doc("Commit Docs", commit_docs.name).as_dict() - commit_docs_obj[commit_docs['route']] = parse_doc - - return commit_docs_obj + parse_doc = parse_commit_docs(commit_docs) + + commit_docs_obj[commit_docs["route"]] = parse_doc + + return commit_docs_obj @frappe.whitelist(allow_guest=True) -def get_commit_docs_details(route:str,show_hidden_items:bool=False): - ''' - Get the Commit Docs Details - # 1. Get the Commit Docs Document from the route - # 2. Check if the Commit Docs Document Published - # 3. Return the Commit Docs Document - # 4. Get The Sidebar Items for the Commit Docs - # 5. Return the Sidebar Items - ''' - user = frappe.session.user - # Check if the Commit Docs Document Exists - if frappe.db.exists('Commit Docs',{'route':route}): - - if user == "Guest": - if frappe.db.get_value('Commit Docs',{'route':route},'published'): - commit_docs = frappe.get_doc('Commit Docs',{'route':route}).as_dict() - - return parse_commit_docs(commit_docs) - else: - return frappe.throw('Docs Not Published') - else: - commit_docs = frappe.get_doc('Commit Docs',{'route':route}).as_dict() - - return parse_commit_docs(commit_docs,show_hidden_items) - - else: - return frappe.throw('Docs Not Found') - - -def parse_commit_docs(commit_docs,show_hidden_items:bool=False): - - # Get the Sidebar Items - sidebar_items = get_sidebar_items(commit_docs.sidebar,show_hidden_items) - - # Get the Footer Items - footer_items = get_footer_items(commit_docs.footer,show_hidden_items) - - # Get the Navbar Items - navbar_items = get_navbar_items(commit_docs.navbar_items,show_hidden_items) - - # remove the sidebar from the commit_docs as it is not needed - commit_docs.pop('sidebar') - commit_docs.pop('footer') - commit_docs.pop('navbar_items') - - return { - 'commit_docs': commit_docs, - 'sidebar_items': sidebar_items, - 'footer_items': footer_items, - 'navbar_items': navbar_items, - } - -def get_footer_items(footer,show_hidden_items:bool=False): - ''' - Get the Footer Items - # 1. Loop Over the Footer Items Which have Parent Label URL and Label - # 2. Check if the Footer Item is Hide on Footer - # 3. Return the Footer Items - ''' - footer_obj = {} - for footer_item in footer: - if footer_item.hide_on_footer and not show_hidden_items: - # If the footer item is hidden and show_hidden_items is False, skip it - continue - - if footer_item.parent_label not in footer_obj: - footer_obj[footer_item.parent_label] = [ - { - 'label': footer_item.label, - 'url': footer_item.url, - 'hide_on_footer': footer_item.hide_on_footer - } - ] - else: - footer_obj[footer_item.parent_label].append({ - 'label': footer_item.label, - 'url': footer_item.url, - 'hide_on_footer': footer_item.hide_on_footer - }) - - return footer_obj - -def get_navbar_items(navbar,show_hidden_items:bool=False): - ''' - Get the Navbar Items - # 1. Loop Over the Navbar Items Which have Label, Parent Label, URL - # 2. Check if the Navbar Item is Hide on Navbar - # 3. Navbar Items are Nothing But Buttons which are displayed on the Navbar - # 4. Parent Label is not Mandatory it is nothing but Like as Menu Button which has Sub Buttons - ''' - - navbar_obj = {} - parent_labels = [] - for navbar_item in navbar: - if navbar_item.hide_on_navbar and not show_hidden_items: - continue - - - if navbar_item.parent_label: - parent_labels.append(navbar_item.parent_label) - if navbar_item.parent_label not in navbar_obj: - navbar_obj[navbar_item.parent_label] = { - 'type':'Menu', - 'label': navbar_item.parent_label, - 'items': [{ - 'label': navbar_item.label, - 'url': navbar_item.url, - 'type': 'Button', - 'icon': navbar_item.icon, - 'open_in_new_tab': navbar_item.open_in_new_tab - }], - 'is_primary_button': navbar_item.is_primary_button, - 'hide_on_navbar': navbar_item.hide_on_navbar - } - else: - navbar_obj[navbar_item.parent_label]['items'].append({ - 'label': navbar_item.label, - 'url': navbar_item.url, - 'type': 'Button', - 'icon': navbar_item.icon, - 'open_in_new_tab': navbar_item.open_in_new_tab, - }) - else: - if navbar_item.url: - navbar_obj[navbar_item.label] = { - 'label': navbar_item.label, - 'type': 'Button', - 'icon': navbar_item.icon, - 'open_in_new_tab': navbar_item.open_in_new_tab, - 'url': navbar_item.url, - 'is_primary_button': navbar_item.is_primary_button, - 'hide_on_navbar': navbar_item.hide_on_navbar - } - - # Remove that Object whose type is Button and Key is in Parent Labels - button_type_keys = [key for key in navbar_obj if navbar_obj[key]['type'] == 'Button' and key in parent_labels] - for key in button_type_keys: - navbar_obj.pop(key) - - return navbar_obj - -def get_sidebar_items(sidebar,show_hidden_items:bool=False): - ''' +def get_commit_docs_details(route: str, show_hidden_items: bool = False): + """ + Get the Commit Docs Details + # 1. Get the Commit Docs Document from the route + # 2. Check if the Commit Docs Document Published + # 3. Return the Commit Docs Document + # 4. Get The Sidebar Items for the Commit Docs + # 5. Return the Sidebar Items + """ + user = frappe.session.user + # Check if the Commit Docs Document Exists + if frappe.db.exists("Commit Docs", {"route": route}): + + if user == "Guest": + if frappe.db.get_value("Commit Docs", {"route": route}, "published"): + commit_docs = frappe.get_doc("Commit Docs", {"route": route}).as_dict() + + return parse_commit_docs(commit_docs) + else: + return frappe.throw("Docs Not Published") + else: + commit_docs = frappe.get_doc("Commit Docs", {"route": route}).as_dict() + + return parse_commit_docs(commit_docs, show_hidden_items) + + else: + return frappe.throw("Docs Not Found") + + +def parse_commit_docs(commit_docs, show_hidden_items: bool = False): + + # Get the Sidebar Items + sidebar_items = get_sidebar_items(commit_docs.sidebar, show_hidden_items) + + # Get the Footer Items + footer_items = get_footer_items(commit_docs.footer, show_hidden_items) + + # Get the Navbar Items + navbar_items = get_navbar_items(commit_docs.navbar_items, show_hidden_items) + + # remove the sidebar from the commit_docs as it is not needed + commit_docs.pop("sidebar") + commit_docs.pop("footer") + commit_docs.pop("navbar_items") + + return { + "commit_docs": commit_docs, + "sidebar_items": sidebar_items, + "footer_items": footer_items, + "navbar_items": navbar_items, + } + + +def get_footer_items(footer, show_hidden_items: bool = False): + """ + Get the Footer Items + # 1. Loop Over the Footer Items Which have Parent Label URL and Label + # 2. Check if the Footer Item is Hide on Footer + # 3. Return the Footer Items + """ + footer_obj = {} + for footer_item in footer: + if footer_item.hide_on_footer and not show_hidden_items: + # If the footer item is hidden and show_hidden_items is False, skip it + continue + + if footer_item.parent_label not in footer_obj: + footer_obj[footer_item.parent_label] = [ + { + "label": footer_item.label, + "url": footer_item.url, + "hide_on_footer": footer_item.hide_on_footer, + } + ] + else: + footer_obj[footer_item.parent_label].append( + { + "label": footer_item.label, + "url": footer_item.url, + "hide_on_footer": footer_item.hide_on_footer, + } + ) + + return footer_obj + + +def get_navbar_items(navbar, show_hidden_items: bool = False): + """ + Get the Navbar Items + # 1. Loop Over the Navbar Items Which have Label, Parent Label, URL + # 2. Check if the Navbar Item is Hide on Navbar + # 3. Navbar Items are Nothing But Buttons which are displayed on the Navbar + # 4. Parent Label is not Mandatory it is nothing but Like as Menu Button which has Sub Buttons + """ + + navbar_obj = {} + parent_labels = [] + for navbar_item in navbar: + if navbar_item.hide_on_navbar and not show_hidden_items: + continue + + if navbar_item.parent_label: + parent_labels.append(navbar_item.parent_label) + if navbar_item.parent_label not in navbar_obj: + navbar_obj[navbar_item.parent_label] = { + "type": "Menu", + "label": navbar_item.parent_label, + "items": [ + { + "label": navbar_item.label, + "url": navbar_item.url, + "type": "Button", + "icon": navbar_item.icon, + "open_in_new_tab": navbar_item.open_in_new_tab, + } + ], + "is_primary_button": navbar_item.is_primary_button, + "hide_on_navbar": navbar_item.hide_on_navbar, + } + else: + navbar_obj[navbar_item.parent_label]["items"].append( + { + "label": navbar_item.label, + "url": navbar_item.url, + "type": "Button", + "icon": navbar_item.icon, + "open_in_new_tab": navbar_item.open_in_new_tab, + } + ) + else: + if navbar_item.url: + navbar_obj[navbar_item.label] = { + "label": navbar_item.label, + "type": "Button", + "icon": navbar_item.icon, + "open_in_new_tab": navbar_item.open_in_new_tab, + "url": navbar_item.url, + "is_primary_button": navbar_item.is_primary_button, + "hide_on_navbar": navbar_item.hide_on_navbar, + } + + # Remove that Object whose type is Button and Key is in Parent Labels + button_type_keys = [ + key + for key in navbar_obj + if navbar_obj[key]["type"] == "Button" and key in parent_labels + ] + for key in button_type_keys: + navbar_obj.pop(key) + + return navbar_obj + + +def get_sidebar_items(sidebar, show_hidden_items: bool = False): + """ Get the Sidebar Items with support for nested Group Pages. - ''' + """ + def get_group_items(commit_docs_page): """ Recursive function to fetch items for a Group Page, handling nested groups. @@ -250,58 +282,70 @@ def get_group_items(commit_docs_page): group_items = [] for group_item in commit_docs_page.linked_pages: # Get the document for each linked page - group_commit_docs_page = frappe.get_doc('Commit Docs Page', group_item.commit_docs_page) + group_commit_docs_page = frappe.get_cached_doc( + "Commit Docs Page", group_item.commit_docs_page + ) # Check permissions and publication status - permitted = group_commit_docs_page.allow_guest or frappe.session.user != 'Guest' - published = group_commit_docs_page.published or frappe.session.user != 'Guest' + permitted = ( + group_commit_docs_page.allow_guest or frappe.session.user != "Guest" + ) + published = ( + group_commit_docs_page.published or frappe.session.user != "Guest" + ) if not permitted or not published: continue - + # Check if the linked page is also a Group Page is_nested_group_page = group_commit_docs_page.is_group_page # If it's a nested Group Page, recursively fetch its group items if is_nested_group_page: nested_group_items = get_group_items(group_commit_docs_page) - group_items.append({ - 'name': group_commit_docs_page.name, - 'type': 'Docs Page', - 'title': group_commit_docs_page.title, - 'route': group_commit_docs_page.route, - 'badge': group_commit_docs_page.badge, - 'badge_color': group_commit_docs_page.badge_color, - 'icon': group_commit_docs_page.icon, - 'parent_name': commit_docs_page.name, - 'is_group_page': True, - 'group_items': nested_group_items, - 'idx': group_commit_docs_page.idx - }) + group_items.append( + { + "name": group_commit_docs_page.name, + "type": "Docs Page", + "title": group_commit_docs_page.title, + "route": group_commit_docs_page.route, + "badge": group_commit_docs_page.badge, + "badge_color": group_commit_docs_page.badge_color, + "icon": group_commit_docs_page.icon, + "parent_name": commit_docs_page.name, + "is_group_page": True, + "group_items": nested_group_items, + "idx": group_commit_docs_page.idx, + } + ) else: # If it's a regular Docs Page, add it directly - group_items.append({ - 'name': group_commit_docs_page.name, - 'type': 'Docs Page', - 'title': group_commit_docs_page.title, - 'route': group_commit_docs_page.route, - 'badge': group_commit_docs_page.badge, - 'badge_color': group_commit_docs_page.badge_color, - 'icon': group_commit_docs_page.icon, - 'parent_name': commit_docs_page.name, - 'idx': group_commit_docs_page.idx - }) - return sorted(group_items, key=lambda x: x['idx']) + group_items.append( + { + "name": group_commit_docs_page.name, + "type": "Docs Page", + "title": group_commit_docs_page.title, + "route": group_commit_docs_page.route, + "badge": group_commit_docs_page.badge, + "badge_color": group_commit_docs_page.badge_color, + "icon": group_commit_docs_page.icon, + "parent_name": commit_docs_page.name, + "idx": group_commit_docs_page.idx, + } + ) + return sorted(group_items, key=lambda x: x["idx"]) sidebar_obj = {} for sidebar_item in sidebar: # Preserve the original order of the sidebar if sidebar_item.hide_on_sidebar and not show_hidden_items: continue - commit_docs_page = frappe.get_doc('Commit Docs Page', sidebar_item.docs_page) + commit_docs_page = frappe.get_cached_doc( + "Commit Docs Page", sidebar_item.docs_page + ) - permitted = commit_docs_page.allow_guest or frappe.session.user != 'Guest' - published = commit_docs_page.published or frappe.session.user != 'Guest' + permitted = commit_docs_page.allow_guest or frappe.session.user != "Guest" + published = commit_docs_page.published or frappe.session.user != "Guest" is_group_page = commit_docs_page.is_group_page if not permitted or not published: @@ -312,18 +356,18 @@ def get_group_items(commit_docs_page): # Prepare sidebar entry with group items if it exists sidebar_entry = { - 'name': commit_docs_page.name, - 'type': 'Docs Page', - 'title': commit_docs_page.title, - 'route': commit_docs_page.route, - 'badge': commit_docs_page.badge, - 'badge_color': commit_docs_page.badge_color, - 'icon': commit_docs_page.icon, - 'group_name': sidebar_item.parent_label, - 'is_group_page': is_group_page, - 'group_items': group_items if is_group_page else None, - 'idx': commit_docs_page.idx, - 'hide_on_sidebar': sidebar_item.hide_on_sidebar + "name": commit_docs_page.name, + "type": "Docs Page", + "title": commit_docs_page.title, + "route": commit_docs_page.route, + "badge": commit_docs_page.badge, + "badge_color": commit_docs_page.badge_color, + "icon": commit_docs_page.icon, + "group_name": sidebar_item.parent_label, + "is_group_page": is_group_page, + "group_items": group_items if is_group_page else None, + "idx": commit_docs_page.idx, + "hide_on_sidebar": sidebar_item.hide_on_sidebar, } # Add sidebar entry to the parent label @@ -334,200 +378,244 @@ def get_group_items(commit_docs_page): return sidebar_obj + @frappe.whitelist(allow_guest=True) -def get_first_page_route(route:str): - ''' - Get the First Page Route from the Commit Docs - ''' - if frappe.db.exists('Commit Docs',{'route':route}): - commit_docs = frappe.get_doc('Commit Docs',{'route':route}) - found = False - for sidebar in commit_docs.sidebar: - commit_docs_page = frappe.get_doc('Commit Docs Page',sidebar.docs_page) - if commit_docs_page.published: - found = True - return commit_docs_page.route - - if not found: - return frappe.throw('Create and Publish the First Page') - - else: - return frappe.throw('Commit Docs Not Found') +def get_first_page_route(route: str): + """ + Get the First Page Route from the Commit Docs + """ + if frappe.db.exists("Commit Docs", {"route": route}): + commit_docs = frappe.get_doc("Commit Docs", {"route": route}) + found = False + for sidebar in commit_docs.sidebar: + commit_docs_page = frappe.get_cached_doc( + "Commit Docs Page", sidebar.docs_page + ) + if commit_docs_page.published: + found = True + return commit_docs_page.route + + if not found: + return frappe.throw("Create and Publish the First Page") + + else: + return frappe.throw("Commit Docs Not Found") + @frappe.whitelist(allow_guest=True) def get_commit_docs_list(): - ''' - Get the List of Commit Docs - ''' - user = frappe.session.user - filters = {} - if user == "Guest": - filters['published'] = 1 - - commit_docs_list = frappe.get_all('Commit Docs', - filters=filters, - fields=["header", "light_mode_logo", "route", "published", "description","name"], - ) + """ + Get the List of Commit Docs + """ + user = frappe.session.user + filters = {} + if user == "Guest": + filters["published"] = 1 + + commit_docs_list = frappe.get_all( + "Commit Docs", + filters=filters, + fields=[ + "header", + "light_mode_logo", + "route", + "published", + "description", + "name", + ], + ) + + return commit_docs_list - return commit_docs_list @frappe.whitelist(methods=["POST"]) -def manage_sidebar(commit_doc:str,parent_labels,docs_page): - ''' - This is to modify the sidebar items of the commit docs - @param commit_doc: The Commit Docs ID - @param parent_labels: The Parent Labels of the Sidebar List - @param docs_page: List of Object having docs page and parent label - - # 1. Get the Commit Docs Document - # 2. Loop Over the Parent Labels - # 3. Look for the Parent Label in docs_page List of Object - # 4. for loop on that filtered list append the docs_page and parent label to the sidebar - # 5. Save the Sidebar Items - ''' - - # Get the Commit Docs Document - doc = frappe.get_doc('Commit Docs',commit_doc) - - # Loop Over the Parent Labels - if isinstance(parent_labels, str): - parent_labels = json.loads(parent_labels) - - if isinstance(docs_page, str): - docs_page = json.loads(docs_page) - - doc.sidebar = [] - for parent_label in parent_labels: - # Filter the docs_page List of Object - filtered_docs_page = [item for item in docs_page if item.get('columnId') == parent_label] - - # Check if there are any duplicate docs_page - duplicate = set() - for item in filtered_docs_page: - if item.get('id') in duplicate: - frappe.throw(f'You have Duplicate Docs Page {item.get("id")} in Same Parent Label {parent_label}') - duplicate.add(item.get('id')) - - # sort by index field - filtered_docs_page = sorted(filtered_docs_page, key=lambda x: x.get('index', 0)) - - # Loop Over the Filtered List - for item in filtered_docs_page: - # Append the docs_page and parent label to the sidebar - doc.append('sidebar',{ - 'parent_label': parent_label, - 'docs_page': item.get('id'), - }) - - doc.save() - - return doc +def manage_sidebar(commit_doc: str, parent_labels, docs_page): + """ + This is to modify the sidebar items of the commit docs + @param commit_doc: The Commit Docs ID + @param parent_labels: The Parent Labels of the Sidebar List + @param docs_page: List of Object having docs page and parent label + + # 1. Get the Commit Docs Document + # 2. Loop Over the Parent Labels + # 3. Look for the Parent Label in docs_page List of Object + # 4. for loop on that filtered list append the docs_page and parent label to the sidebar + # 5. Save the Sidebar Items + """ + + # Get the Commit Docs Document + doc = frappe.get_cached_doc("Commit Docs", commit_doc) + + # Loop Over the Parent Labels + if isinstance(parent_labels, str): + parent_labels = json.loads(parent_labels) + + if isinstance(docs_page, str): + docs_page = json.loads(docs_page) + + doc.sidebar = [] + for parent_label in parent_labels: + # Filter the docs_page List of Object + filtered_docs_page = [ + item for item in docs_page if item.get("columnId") == parent_label + ] + + # Check if there are any duplicate docs_page + duplicate = set() + for item in filtered_docs_page: + if item.get("id") in duplicate: + frappe.throw( + f'You have Duplicate Docs Page {item.get("id")} in Same Parent Label {parent_label}' + ) + duplicate.add(item.get("id")) + + # sort by index field + filtered_docs_page = sorted(filtered_docs_page, key=lambda x: x.get("index", 0)) + + # Loop Over the Filtered List + for item in filtered_docs_page: + # Append the docs_page and parent label to the sidebar + doc.append( + "sidebar", + { + "parent_label": parent_label, + "docs_page": item.get("id"), + }, + ) + + doc.save() + + return doc + @frappe.whitelist(methods=["POST"]) -def manage_navbar(commit_doc:str, navbar_items, sub_navbar_items=None): - ''' - This is to modify the navbar items of the commit docs - @param commit_doc: The Commit Docs ID - @param navbar_items: The Navbar Items List of Object having label, url, parent label, icon, open_in_new_tab - - # 1. Get the Commit Docs Document - # 2. Loop Over the Navbar Items - # 3. Append the Navbar Items to the Navbar Items Table - # 4. Save the Navbar Items - ''' - - doc = frappe.get_doc('Commit Docs',commit_doc) - - if isinstance(navbar_items, str): - navbar_items = json.loads(navbar_items) - - if isinstance(sub_navbar_items, str): - sub_navbar_items = json.loads(sub_navbar_items) - - doc.navbar_items = [] - # sort the navbar_items by index field - navbar_items = sorted(navbar_items, key=lambda x: x.get('index', 0)) - - for item in navbar_items: - if item.get('type') == "Menu": - doc.append('navbar_items',{ - 'label': item.get('label'), - 'hide_on_navbar': item.get('hide_on_navbar'), - }) - if sub_navbar_items: - # find the task in the sub_navbar_items where columnId is equal to item.get('label') - sub_items = [sub_item for sub_item in sub_navbar_items if sub_item.get('columnId') == item.get('label')] - # sort the sub_items by index field - sub_items = sorted(sub_items, key=lambda x: x.get('index', 0)) - # Loop Over the Sub Items - for sub_item in sub_items: - doc.append('navbar_items',{ - 'label': sub_item.get('label'), - 'url': sub_item.get('url'), - 'icon': sub_item.get('icon'), - 'open_in_new_tab': sub_item.get('open_in_new_tab'), - "parent_label": item.get('label'), - }) - - else: - doc.append('navbar_items',{ - 'label': item.get('label'), - 'url': item.get('url'), - 'icon': item.get('icon'), - 'open_in_new_tab': item.get('open_in_new_tab'), - 'hide_on_navbar': item.get('hide_on_navbar'), - 'is_primary_button': item.get('is_primary_button') - }) - - doc.save() - - return doc +def manage_navbar(commit_doc: str, navbar_items, sub_navbar_items=None): + """ + This is to modify the navbar items of the commit docs + @param commit_doc: The Commit Docs ID + @param navbar_items: The Navbar Items List of Object having label, url, parent label, icon, open_in_new_tab + + # 1. Get the Commit Docs Document + # 2. Loop Over the Navbar Items + # 3. Append the Navbar Items to the Navbar Items Table + # 4. Save the Navbar Items + """ + + doc = frappe.get_cached_doc("Commit Docs", commit_doc) + + if isinstance(navbar_items, str): + navbar_items = json.loads(navbar_items) + + if isinstance(sub_navbar_items, str): + sub_navbar_items = json.loads(sub_navbar_items) + + doc.navbar_items = [] + # sort the navbar_items by index field + navbar_items = sorted(navbar_items, key=lambda x: x.get("index", 0)) + + for item in navbar_items: + if item.get("type") == "Menu": + doc.append( + "navbar_items", + { + "label": item.get("label"), + "hide_on_navbar": item.get("hide_on_navbar"), + }, + ) + if sub_navbar_items: + # find the task in the sub_navbar_items where columnId is equal to item.get('label') + sub_items = [ + sub_item + for sub_item in sub_navbar_items + if sub_item.get("columnId") == item.get("id") + ] + # sort the sub_items by index field + sub_items = sorted(sub_items, key=lambda x: x.get("index", 0)) + # Loop Over the Sub Items + for sub_item in sub_items: + doc.append( + "navbar_items", + { + "label": sub_item.get("label"), + "url": sub_item.get("url"), + "icon": sub_item.get("icon"), + "open_in_new_tab": sub_item.get("open_in_new_tab"), + "parent_label": item.get("label"), + }, + ) + + else: + doc.append( + "navbar_items", + { + "label": item.get("label"), + "url": item.get("url"), + "icon": item.get("icon"), + "open_in_new_tab": item.get("open_in_new_tab"), + "hide_on_navbar": item.get("hide_on_navbar"), + "is_primary_button": item.get("is_primary_button"), + }, + ) + + doc.save() + + return doc + @frappe.whitelist(methods=["POST"]) -def manage_footer(commit_doc:str, footer_columns, footer_items): - ''' - This is to modify the footer items of the commit docs - @param commit_doc: The Commit Docs ID - @param footer_columns: The Footer Columns List of Parent Label - @param footer_items: The Footer Items List of Object having label, url, hide_on_footer, columnId,id - - # 1. Get the Commit Docs Document - # 2. Loop Over the Footer Columns - # 3. Search for the Parent Label in the Footer Items - # 4. Loop over the filtered list and append the footer items to the footer - # 5. Save the Footer Items - ''' - - doc = frappe.get_doc('Commit Docs',commit_doc) - if isinstance(footer_columns, str): - footer_columns = json.loads(footer_columns) - - if isinstance(footer_items, str): - footer_items = json.loads(footer_items) - - doc.footer = [] - for parent_label in footer_columns: - # Filter the footer_items List of Object - filtered_footer_items = [item for item in footer_items if item.get('columnId') == parent_label] - - # Check if there are any duplicate footer_items - duplicate = set() - for item in filtered_footer_items: - if item.get('id') in duplicate: - frappe.throw(f'You have Duplicate Footer Item {item.get("id")} in Same Parent Label {parent_label}') - duplicate.add(item.get('id')) - - # sort by index field - filtered_footer_items = sorted(filtered_footer_items, key=lambda x: x.get('index', 0)) - - for item in filtered_footer_items: - doc.append('footer',{ - 'label': item.get('label'), - 'url': item.get('url'), - 'hide_on_footer': item.get('hide_on_footer'), - 'parent_label': parent_label, - }) - - doc.save() - - return doc \ No newline at end of file +def manage_footer(commit_doc: str, footer_columns, footer_items): + """ + This is to modify the footer items of the commit docs + @param commit_doc: The Commit Docs ID + @param footer_columns: The Footer Columns List of Parent Label + @param footer_items: The Footer Items List of Object having label, url, hide_on_footer, columnId,id + + # 1. Get the Commit Docs Document + # 2. Loop Over the Footer Columns + # 3. Search for the Parent Label in the Footer Items + # 4. Loop over the filtered list and append the footer items to the footer + # 5. Save the Footer Items + """ + + doc = frappe.get_cached_doc("Commit Docs", commit_doc) + if isinstance(footer_columns, str): + footer_columns = json.loads(footer_columns) + + if isinstance(footer_items, str): + footer_items = json.loads(footer_items) + + doc.footer = [] + for parent_label in footer_columns: + # Filter the footer_items List of Object + filtered_footer_items = [ + item for item in footer_items if item.get("columnId") == parent_label + ] + + # Check if there are any duplicate footer_items + duplicate = set() + for item in filtered_footer_items: + if item.get("id") in duplicate: + frappe.throw( + f'You have Duplicate Footer Item {item.get("id")} in Same Parent Label {parent_label}' + ) + duplicate.add(item.get("id")) + + # sort by index field + filtered_footer_items = sorted( + filtered_footer_items, key=lambda x: x.get("index", 0) + ) + + for item in filtered_footer_items: + doc.append( + "footer", + { + "label": item.get("label"), + "url": item.get("url"), + "hide_on_footer": item.get("hide_on_footer"), + "parent_label": parent_label, + }, + ) + + doc.save() + + return doc diff --git a/commit/commit/doctype/commit_docs/test_commit_docs.py b/commit/commit/doctype/commit_docs/test_commit_docs.py index 16a9eec..48d5af8 100644 --- a/commit/commit/doctype/commit_docs/test_commit_docs.py +++ b/commit/commit/doctype/commit_docs/test_commit_docs.py @@ -6,4 +6,4 @@ class TestCommitDocs(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.json b/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.json index 086ee0e..a3a8ea2 100644 --- a/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.json +++ b/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.json @@ -53,4 +53,4 @@ "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.py b/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.py index 731271e..0915636 100644 --- a/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.py +++ b/commit/commit/doctype/commit_docs_footer_item/commit_docs_footer_item.py @@ -6,4 +6,4 @@ class CommitDocsFooterItem(Document): - pass + pass diff --git a/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.json b/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.json index 44023cc..1fb66f5 100644 --- a/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.json +++ b/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.json @@ -45,4 +45,4 @@ "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.py b/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.py index 04eb61e..aeebba0 100644 --- a/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.py +++ b/commit/commit/doctype/commit_docs_group_item/commit_docs_group_item.py @@ -6,4 +6,4 @@ class CommitDocsGroupItem(Document): - pass + pass diff --git a/commit/commit/doctype/commit_docs_page/commit_docs_page.json b/commit/commit/doctype/commit_docs_page/commit_docs_page.json index c15b38a..0de8479 100644 --- a/commit/commit/doctype/commit_docs_page/commit_docs_page.json +++ b/commit/commit/doctype/commit_docs_page/commit_docs_page.json @@ -53,7 +53,7 @@ { "depends_on": "eval:doc.is_group_page == 0", "fieldname": "content", - "fieldtype": "Markdown Editor", + "fieldtype": "Code", "ignore_xss_filter": 1, "label": "Content" }, @@ -114,7 +114,7 @@ "grid_page_length": 50, "index_web_pages_for_search": 1, "links": [], - "modified": "2025-03-15 17:10:43.887534", + "modified": "2025-05-23 14:48:34.393866", "modified_by": "Administrator", "module": "commit", "name": "Commit Docs Page", @@ -139,4 +139,4 @@ "sort_order": "DESC", "states": [], "title_field": "title" -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_docs_page/commit_docs_page.py b/commit/commit/doctype/commit_docs_page/commit_docs_page.py index 63f3985..342d197 100644 --- a/commit/commit/doctype/commit_docs_page/commit_docs_page.py +++ b/commit/commit/doctype/commit_docs_page/commit_docs_page.py @@ -1,206 +1,304 @@ # Copyright (c) 2024, The Commit Company and contributors # For license information, please see license.txt +import json +import re + import frappe +from bs4 import BeautifulSoup from frappe.model.document import Document -import json + from commit.api.preview import save_preview_screenshot + class CommitDocsPage(Document): - - def before_insert(self): - # Set the route for the page based on the title - self.route = f'{self.commit_docs.lower().replace(" ", "-")}-{self.title.lower().replace(" ", "-")}' - - def before_save(self): - # Check if this document is first item of commit docs sidebar child table - if self.commit_docs: - commit_docs = frappe.get_cached_doc('Commit Docs', self.commit_docs) - if commit_docs.sidebar: - first = commit_docs.sidebar[0] - if first.docs_page == self.name: - domain = frappe.utils.get_url() - docs_url = f'{domain}/commit-docs/{commit_docs.route}/{self.name}' - frappe.enqueue(method=save_preview_screenshot, url=docs_url,doctype="Commit Docs",docname=commit_docs.name,field='preview_image') - -@frappe.whitelist(methods=['POST']) -def publish_documentation(project_branch, endpoint, viewer_type, docs_name, parent_label, title, published, allow_guest, content): - ''' - Publish the Documentation - # 1. Create a new Commit Docs Page Document - # 2. Update the Commit Docs Document with the new Page by adding it to the Sidebar child table - # 3. Based on viewer_type, update the flag is_published, published_on, published_by, publish_id - ''' - - # 1. Create a new Commit Docs Page Document - commit_docs_page = frappe.get_doc({ - 'doctype': 'Commit Docs Page', - 'title': title, - 'published': published, - 'allow_guest': allow_guest, - 'content': content - }) - - commit_docs_page.insert() - - # 2. Update the Commit Docs Document with the new Page by adding it to the Sidebar child table - - commit_docs = frappe.get_doc('Commit Docs', docs_name) - - commit_docs.append('sidebar', { - 'parent_label': parent_label, - 'docs_page': commit_docs_page.name - }) - - commit_docs.save() - - # 3. Check the viewer_type - - if viewer_type == "project": - # Get the Project Branch Document - project_branch_doc = frappe.get_doc('Commit Project Branch', project_branch) - - # Get the documentation JSON - documentation = json.loads(project_branch_doc.documentation).get("apis", []) if project_branch_doc.documentation else [] - - if documentation: - # Find the API from the documentation JSON - api = next((api for api in documentation if api.get('path') == endpoint), None) - - if api: - # Update the API with the published_on, published_by, is_published, publish_id - api['published_on'] = commit_docs_page.creation - api['published_by'] = frappe.session.user - api['is_published'] = 1 - api['publish_id'] = commit_docs_page.name - api['published_route'] = f'{commit_docs.route}/{commit_docs_page.route}' - - project_branch_doc.documentation = json.dumps({"apis": documentation}) - project_branch_doc.save() - - else: - commit_branch_documentation= frappe.get_doc('Commit Branch Documentation', project_branch) - - # Get the documentation JSON - documentation = json.loads(commit_branch_documentation.documentation).get("apis", []) if commit_branch_documentation.documentation else [] - - if documentation: - # Find the API from the documentation JSON - api = next((api for api in documentation if api.get('path') == endpoint), None) - - if api: - # Update the API with the published_on, published_by, is_published, publish_id - api['published_on'] = commit_docs_page.creation - api['published_by'] = frappe.session.user - api['is_published'] = 1 - api['publish_id'] = commit_docs_page.name - api['published_route'] = f'{commit_docs.route}/{commit_docs_page.route}' - - commit_branch_documentation.documentation = json.dumps({"apis": documentation}) - commit_branch_documentation.save() - - return { - 'commit_docs_page': commit_docs_page.name, - 'commit_docs': commit_docs.name - } + + def before_insert(self): + # Set the route for the page based on the title + self.route = f'{self.commit_docs.lower().replace(" ", "-")}-{self.title.lower().replace(" ", "-")}' + + def before_save(self): + # Check if this document is first item of commit docs sidebar child table + if self.commit_docs: + commit_docs = frappe.get_cached_doc("Commit Docs", self.commit_docs) + if commit_docs.sidebar: + first = commit_docs.sidebar[0] + if first.docs_page == self.name: + domain = frappe.utils.get_url() + docs_url = f"{domain}/commit-docs/{commit_docs.route}/{self.name}" + frappe.enqueue( + method=save_preview_screenshot, + url=docs_url, + doctype="Commit Docs", + docname=commit_docs.name, + field="preview_image", + ) + + def get_docs_url(self): + """ + Get the URL for the Commit Docs Page + """ + if self.commit_docs: + commit_docs_route = frappe.get_cached_value( + "Commit Docs", self.commit_docs, "route" + ) + domain = frappe.utils.get_url() + return f"{domain}/commit-docs/{commit_docs_route}/{self.route}" + return None + + +@frappe.whitelist(methods=["POST"]) +def publish_documentation( + project_branch, + endpoint, + viewer_type, + docs_name, + parent_label, + title, + published, + allow_guest, + content, +): + """ + Publish the Documentation + # 1. Create a new Commit Docs Page Document + # 2. Update the Commit Docs Document with the new Page by adding it to the Sidebar child table + # 3. Based on viewer_type, update the flag is_published, published_on, published_by, publish_id + """ + + # 1. Create a new Commit Docs Page Document + commit_docs_page = frappe.get_cached_doc( + { + "doctype": "Commit Docs Page", + "title": title, + "published": published, + "allow_guest": allow_guest, + "content": content, + } + ) + + commit_docs_page.insert() + + # 2. Update the Commit Docs Document with the new Page by adding it to the Sidebar child table + + commit_docs = frappe.get_cached_doc("Commit Docs", docs_name) + + commit_docs.append( + "sidebar", {"parent_label": parent_label, "docs_page": commit_docs_page.name} + ) + + commit_docs.save() + + # 3. Check the viewer_type + + if viewer_type == "project": + # Get the Project Branch Document + project_branch_doc = frappe.get_cached_doc( + "Commit Project Branch", project_branch + ) + + # Get the documentation JSON + documentation = ( + json.loads(project_branch_doc.documentation).get("apis", []) + if project_branch_doc.documentation + else [] + ) + + if documentation: + # Find the API from the documentation JSON + api = next( + (api for api in documentation if api.get("path") == endpoint), None + ) + + if api: + # Update the API with the published_on, published_by, is_published, publish_id + api["published_on"] = commit_docs_page.creation + api["published_by"] = frappe.session.user + api["is_published"] = 1 + api["publish_id"] = commit_docs_page.name + api["published_route"] = f"{commit_docs.route}/{commit_docs_page.route}" + + project_branch_doc.documentation = json.dumps({"apis": documentation}) + project_branch_doc.save() + + else: + commit_branch_documentation = frappe.get_cached_doc( + "Commit Branch Documentation", project_branch + ) + + # Get the documentation JSON + documentation = ( + json.loads(commit_branch_documentation.documentation).get("apis", []) + if commit_branch_documentation.documentation + else [] + ) + + if documentation: + # Find the API from the documentation JSON + api = next( + (api for api in documentation if api.get("path") == endpoint), None + ) + + if api: + # Update the API with the published_on, published_by, is_published, publish_id + api["published_on"] = commit_docs_page.creation + api["published_by"] = frappe.session.user + api["is_published"] = 1 + api["publish_id"] = commit_docs_page.name + api["published_route"] = f"{commit_docs.route}/{commit_docs_page.route}" + + commit_branch_documentation.documentation = json.dumps( + {"apis": documentation} + ) + commit_branch_documentation.save() + + return {"commit_docs_page": commit_docs_page.name, "commit_docs": commit_docs.name} + @frappe.whitelist(allow_guest=True) def get_commit_docs_page(name): - ''' - Get the Commit Docs Page - ''' - user = frappe.session.user - - doc = frappe.get_cached_doc('Commit Docs Page', name) + """ + Get the Commit Docs Page + """ + user = frappe.session.user + + doc = frappe.get_cached_doc("Commit Docs Page", name) + + if user == "Guest" and not doc.allow_guest and not doc.published: + frappe.throw("You are not allowed to view this page") + + def process_codeblocks(md): + # 1. Remove code fences for ```JSX blocks (render as HTML) + def jsx_repl(match): + code = match.group(1) + return code # Just the code, no code block + + md = re.sub(r"```JSX\n(.*?)```", jsx_repl, md, flags=re.DOTALL) + + # 2. Change ```React to ```jsx (lowercase) + def react_repl(match): + code = match.group(1) + return f"```jsx\n{code}```" - if user == "Guest" and not doc.allow_guest and not doc.published: - frappe.throw("You are not allowed to view this page") + md = re.sub(r"```React\n(.*?)```", react_repl, md, flags=re.DOTALL) - # Get the content as HTML - html = frappe.utils.md_to_html(doc.content) + # 3. Lowercase all other code block languages (except jsx, already handled) + def lower_repl(match): + lang = match.group(1) + code = match.group(2) + if lang.lower() in ["jsx", "react"]: + return match.group(0) # Already handled + return f"```{lang.lower()}\n{code}```" - # Calculate the Table of Contents - toc_obj = calculate_toc_object(html) + md = re.sub(r"```(\w+)\n(.*?)```", lower_repl, md, flags=re.DOTALL) - return { - 'doc': doc, - 'toc_obj': toc_obj - } + return md + + doc.content = process_codeblocks(doc.content) + + # Get the content as HTML + html = frappe.utils.md_to_html(doc.content) + + # Calculate the Table of Contents + toc_obj = calculate_toc_object(html) + + return {"doc": doc, "toc_obj": toc_obj} def calculate_toc_object(html): - from bs4 import BeautifulSoup import re + from bs4 import BeautifulSoup + soup = BeautifulSoup(html, "html.parser") headings = soup.find_all(["h2", "h3", "h4", "h5", "h6"]) toc = {} + stack = [] # To keep track of the current hierarchy def add_to_toc(toc, level, heading_id, title): - if level == 2: - toc[heading_id] = {"name": title, "children": {}} + # Ensure the stack is consistent with the current level + while stack and stack[-1]["level"] >= level: + stack.pop() + + # Create the new heading entry + new_entry = {"id": heading_id, "name": title, "children": {}} + + if not stack: + # Top-level heading + toc[heading_id] = new_entry + stack.append({"level": level, "children": toc[heading_id]["children"]}) else: - parent_level = level - 1 - parent = toc - while parent_level > 2: - if not parent: - break - parent = next(iter(parent.values()))["children"] - parent_level -= 1 - if parent: - parent[next(iter(parent.keys()))]["children"][heading_id] = {"name": title, "children": {}} + # Nested heading + parent = stack[-1]["children"] + parent[heading_id] = new_entry + stack.append({"level": level, "children": parent[heading_id]["children"]}) for heading in headings: title = heading.get_text().strip() - heading_id = re.sub(r"[^\u00C0-\u1FFF\u2C00-\uD7FF\w\- ]", "", title).replace(" ", "-").lower() + heading_id = ( + re.sub(r"[^\u00C0-\u1FFF\u2C00-\uD7FF\w\- ]", "", title) + .replace(" ", "-") + .lower() + ) heading["id"] = heading_id - level = int(heading.name[1]) + level = int( + heading.name[1] + ) # Extract the level from the tag name (e.g., h2 -> 2) add_to_toc(toc, level, heading_id, title) return toc + @frappe.whitelist() def get_commit_docs_page_list(commit_doc): - ''' - Get the list of Commit Docs Page - ''' - user_info = {} - users = [] - page = frappe.get_all('Commit Docs Page', filters={'commit_docs': commit_doc}, fields=['*'], order_by='creation desc') - for p in page: - users.append(p.owner) - users.append(p.modified_by) - users = list(set(users)) - frappe.utils.add_user_info(users, user_info) - - return { - 'pages': page, - 'user_info': user_info - } + """ + Get the list of Commit Docs Page + """ + user_info = {} + users = [] + page = frappe.get_all( + "Commit Docs Page", + filters={"commit_docs": commit_doc}, + fields=["*"], + order_by="creation desc", + ) + for p in page: + users.append(p.owner) + users.append(p.modified_by) + users = list(set(users)) + frappe.utils.add_user_info(users, user_info) + + return {"pages": page, "user_info": user_info} + @frappe.whitelist() def create_commit_docs_page(data): - ''' - Create a new Commit Docs Page - ''' - if isinstance(data, str): - data = json.loads(data) - - # create a new Commit Docs Page - commit_docs_page = frappe.get_doc({ - 'doctype': 'Commit Docs Page', - 'title': data.get('title'), - 'commit_docs': data.get('commit_docs'), - }) - - commit_docs_page.insert() - - if data.get('sidebar_label'): - commit_doc = frappe.get_doc('Commit Docs', data.get('commit_docs')) - commit_doc.append('sidebar', { - 'parent_label': data.get('sidebar_label'), - 'docs_page': commit_docs_page.name - }) - commit_doc.save() - return commit_docs_page \ No newline at end of file + """ + Create a new Commit Docs Page + """ + if isinstance(data, str): + data = json.loads(data) + + # create a new Commit Docs Page + commit_docs_page = frappe.get_cached_doc( + { + "doctype": "Commit Docs Page", + "title": data.get("title"), + "commit_docs": data.get("commit_docs"), + } + ) + + commit_docs_page.insert() + + if data.get("sidebar_label"): + commit_doc = frappe.get_cached_doc("Commit Docs", data.get("commit_docs")) + commit_doc.append( + "sidebar", + { + "parent_label": data.get("sidebar_label"), + "docs_page": commit_docs_page.name, + }, + ) + commit_doc.save() + return commit_docs_page diff --git a/commit/commit/doctype/commit_docs_page/test_commit_docs_page.py b/commit/commit/doctype/commit_docs_page/test_commit_docs_page.py index 8f60b81..1e1691e 100644 --- a/commit/commit/doctype/commit_docs_page/test_commit_docs_page.py +++ b/commit/commit/doctype/commit_docs_page/test_commit_docs_page.py @@ -4,7 +4,6 @@ # import frappe from frappe.tests import IntegrationTestCase, UnitTestCase - # On IntegrationTestCase, the doctype test records and all # link-field test record depdendencies are recursively loaded # Use these module variables to add/remove to/from that list @@ -13,18 +12,18 @@ class TestCommitDocsPage(UnitTestCase): - """ - Unit tests for CommitDocsPage. - Use this class for testing individual functions and methods. - """ + """ + Unit tests for CommitDocsPage. + Use this class for testing individual functions and methods. + """ - pass + pass class TestCommitDocsPage(IntegrationTestCase): - """ - Integration tests for CommitDocsPage. - Use this class for testing interactions between multiple components. - """ + """ + Integration tests for CommitDocsPage. + Use this class for testing interactions between multiple components. + """ - pass + pass diff --git a/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.json b/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.json index fa2edf2..98da27e 100644 --- a/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.json +++ b/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.json @@ -83,4 +83,4 @@ "sort_field": "creation", "sort_order": "ASC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.py b/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.py index 024b9f3..efd53cb 100644 --- a/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.py +++ b/commit/commit/doctype/commit_docs_topbar_item/commit_docs_topbar_item.py @@ -6,4 +6,4 @@ class CommitDocsTopbarItem(Document): - pass + pass diff --git a/commit/commit/doctype/commit_organization/commit_organization.json b/commit/commit/doctype/commit_organization/commit_organization.json index 350a7b9..b645922 100644 --- a/commit/commit/doctype/commit_organization/commit_organization.json +++ b/commit/commit/doctype/commit_organization/commit_organization.json @@ -81,4 +81,4 @@ "states": [], "title_field": "organization_name", "track_changes": 1 -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_organization/commit_organization.py b/commit/commit/doctype/commit_organization/commit_organization.py index 8567779..bafacd0 100644 --- a/commit/commit/doctype/commit_organization/commit_organization.py +++ b/commit/commit/doctype/commit_organization/commit_organization.py @@ -6,11 +6,11 @@ class CommitOrganization(Document): - def on_trash(self): - # find all project which are linked with this organisation - # delete all projects - projects = frappe.get_all('Commit Project',filters={ - 'org':self.name - },pluck='name') - for project in projects: - frappe.db.delete('Commit Project',project) + def on_trash(self): + # find all project which are linked with this organisation + # delete all projects + projects = frappe.get_all( + "Commit Project", filters={"org": self.name}, pluck="name" + ) + for project in projects: + frappe.db.delete("Commit Project", project) diff --git a/commit/commit/doctype/commit_organization/test_commit_organization.py b/commit/commit/doctype/commit_organization/test_commit_organization.py index ffb2f00..14516ed 100644 --- a/commit/commit/doctype/commit_organization/test_commit_organization.py +++ b/commit/commit/doctype/commit_organization/test_commit_organization.py @@ -6,4 +6,4 @@ class TestCommitOrganization(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/commit_project/commit_project.json b/commit/commit/doctype/commit_project/commit_project.json index 9ecfd15..afd371f 100644 --- a/commit/commit/doctype/commit_project/commit_project.json +++ b/commit/commit/doctype/commit_project/commit_project.json @@ -118,4 +118,4 @@ "states": [], "title_field": "display_name", "track_changes": 1 -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_project/commit_project.py b/commit/commit/doctype/commit_project/commit_project.py index ea2afe6..81e76f3 100644 --- a/commit/commit/doctype/commit_project/commit_project.py +++ b/commit/commit/doctype/commit_project/commit_project.py @@ -1,48 +1,50 @@ # Copyright (c) 2023, The Commit Company and contributors # For license information, please see license.txt -import frappe -import os import io +import os from pathlib import Path + +import frappe from frappe.model.document import Document + from commit.api.code_analysis import get_name_of_app + class CommitProject(Document): - def before_insert(self): - self.app_name = get_name_of_app(self.org, self.repo_name) - self.create_project_folder() - - def create_project_folder(self): - ''' - Need to create a project folder when a project is created - The folder needs to be created in the site folder in public - ''' - # Create folder for the org in the sites folder if it does not exist - main_folder_path = frappe.get_site_path("public", "organizations") - if not os.path.exists(main_folder_path): - os.mkdir(main_folder_path) - org_path = frappe.get_site_path("public", "organizations", self.org) - if not os.path.exists(org_path): - os.mkdir(org_path) - - # Create a folder for the project in the org folder if it does not exist - project_path = org_path + "/" + self.repo_name - - if not os.path.exists(project_path): - os.mkdir(project_path) - - self.path_to_folder = project_path - - - return - - def on_trash(self): - # find all branches which are linked with this project - # delete all branches - branches = frappe.get_all("Commit Project Branch", filters={ - 'project' : self.name - }, pluck='name') - for branch in branches: - frappe.db.delete("Commit Project Branch", branch) + def before_insert(self): + self.app_name = get_name_of_app(self.org, self.repo_name) + self.create_project_folder() + + def create_project_folder(self): + """ + Need to create a project folder when a project is created + The folder needs to be created in the site folder in public + """ + # Create folder for the org in the sites folder if it does not exist + main_folder_path = frappe.get_site_path("public", "organizations") + if not os.path.exists(main_folder_path): + os.mkdir(main_folder_path) + org_path = frappe.get_site_path("public", "organizations", self.org) + if not os.path.exists(org_path): + os.mkdir(org_path) + + # Create a folder for the project in the org folder if it does not exist + project_path = org_path + "/" + self.repo_name + + if not os.path.exists(project_path): + os.mkdir(project_path) + + self.path_to_folder = project_path + + return + + def on_trash(self): + # find all branches which are linked with this project + # delete all branches + branches = frappe.get_all( + "Commit Project Branch", filters={"project": self.name}, pluck="name" + ) + for branch in branches: + frappe.db.delete("Commit Project Branch", branch) diff --git a/commit/commit/doctype/commit_project/test_commit_project.py b/commit/commit/doctype/commit_project/test_commit_project.py index 8d1aba8..6b94f0d 100644 --- a/commit/commit/doctype/commit_project/test_commit_project.py +++ b/commit/commit/doctype/commit_project/test_commit_project.py @@ -6,4 +6,4 @@ class TestCommitProject(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/commit_project_branch/commit_project_branch.json b/commit/commit/doctype/commit_project_branch/commit_project_branch.json index 831818e..581e4eb 100644 --- a/commit/commit/doctype/commit_project_branch/commit_project_branch.json +++ b/commit/commit/doctype/commit_project_branch/commit_project_branch.json @@ -162,4 +162,4 @@ "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_project_branch/commit_project_branch.py b/commit/commit/doctype/commit_project_branch/commit_project_branch.py index 657cdc2..b0b5b44 100644 --- a/commit/commit/doctype/commit_project_branch/commit_project_branch.py +++ b/commit/commit/doctype/commit_project_branch/commit_project_branch.py @@ -1,69 +1,84 @@ # Copyright (c) 2023, The Commit Company and contributors # For license information, please see license.txt -import frappe -import git +import json import os import shutil -import json + +import frappe +import git +from frappe.app import handle_exception from frappe.model.document import Document -from commit.commit.code_analysis.apis import find_all_occurrences_of_whitelist -from commit.commit.code_analysis.doctypes import get_doctypes_in_module, get_doctype_json from frappe.utils import now -from frappe.app import handle_exception + from commit.api.api_explorer import get_file_content_from_path from commit.api.generate_documentation import generate_docs_for_apis +from commit.commit.code_analysis.apis import find_all_occurrences_of_whitelist +from commit.commit.code_analysis.doctypes import ( + get_doctype_json, + get_doctypes_in_module, +) + class CommitProjectBranch(Document): def before_insert(self): self.path_to_folder = self.get_path_to_folder() self.create_branch_folder() - + def after_insert(self): frappe.enqueue( - method = background_fetch_process, - is_async = True, + method=background_fetch_process, + is_async=True, job_name="Fetch Project Branch", - enqueue_after_commit = True, - at_front = True, - project_branch = self.name + enqueue_after_commit=True, + at_front=True, + project_branch=self.name, ) def on_update(self): old_doc = self.get_doc_before_save() if type(self.whitelisted_apis) == str: - apis = json.loads(self.whitelisted_apis if self.whitelisted_apis else '').get("apis", []) + apis = json.loads( + self.whitelisted_apis if self.whitelisted_apis else "" + ).get("apis", []) else: - apis = self.whitelisted_apis.get("apis", []) if self.whitelisted_apis else [] - if old_doc and old_doc.whitelisted_apis != self.whitelisted_apis and len(apis) > 0: + apis = ( + self.whitelisted_apis.get("apis", []) if self.whitelisted_apis else [] + ) + if ( + old_doc + and old_doc.whitelisted_apis != self.whitelisted_apis + and len(apis) > 0 + ): frappe.enqueue( - method = generate_branch_documentation, - is_async = True, + method=generate_branch_documentation, + is_async=True, job_name="Generate Branch Documentation", - enqueue_after_commit = True, - at_front = True, + enqueue_after_commit=True, + at_front=True, queue="long", - project_branch = self.name - ) + project_branch=self.name, + ) def create_branch_folder(self): if not os.path.exists(self.path_to_folder): os.mkdir(self.path_to_folder) def get_path_to_folder(self): - project = frappe.get_doc("Commit Project", self.project) + project = frappe.get_cached_doc("Commit Project", self.project) return project.path_to_folder + "/" + self.branch_name def clone_repo(self): - project = frappe.get_doc("Commit Project", self.project) + project = frappe.get_cached_doc("Commit Project", self.project) self.app_name = project.app_name - repo_url = "https://github.com/{}/{}".format( - project.org, project.repo_name) + repo_url = "https://github.com/{}/{}".format(project.org, project.repo_name) folder_path = self.path_to_folder - repo = git.Repo.clone_from(repo_url, folder_path, branch=self.branch_name, single_branch=True) + repo = git.Repo.clone_from( + repo_url, folder_path, branch=self.branch_name, single_branch=True + ) self.last_fetched = frappe.utils.now_datetime() self.commit_hash = repo.head.object.hexsha @@ -71,8 +86,14 @@ def fetch_repo(self): repo = git.Repo(self.path_to_folder) repo.remotes.origin.fetch() - # Pull the latest changes from the remote - repo.remotes.origin.pull() + # Force fast-forward only to avoid merge commits + try: + # Try fast-forward pull + repo.git.pull("--ff-only") + except Exception as e: + # If fast-forward not possible, reset to remote branch + repo.git.reset("--hard", "origin/" + self.branch_name) + self.last_fetched = now() self.commit_hash = repo.head.object.hexsha @@ -83,10 +104,9 @@ def fetch_repo(self): pass def get_modules(self): - modules_path = os.path.join( - self.path_to_folder, self.app_name, 'modules.txt') + modules_path = os.path.join(self.path_to_folder, self.app_name, "modules.txt") if os.path.isfile(modules_path): - modules_file = open(modules_path, 'r') + modules_file = open(modules_path, "r") modules = modules_file.read().splitlines() self.modules = ",".join(modules) @@ -94,7 +114,8 @@ def get_modules(self): doctype_module_map = {} for module in modules: module_doctypes_map[module] = get_doctypes_in_module( - self.path_to_folder, self.app_name, module) + self.path_to_folder, self.app_name, module + ) for doctype in module_doctypes_map[module].get("doctype_names", []): doctype_module_map[doctype] = module @@ -102,49 +123,56 @@ def get_modules(self): self.doctype_module_map = doctype_module_map def find_all_apis(self): - apis = find_all_occurrences_of_whitelist( - self.path_to_folder, self.app_name) + apis = find_all_occurrences_of_whitelist(self.path_to_folder, self.app_name) # Convert list to string and save to database - self.whitelisted_apis = { - "apis": apis - } + self.whitelisted_apis = {"apis": apis} return apis def get_whitelisted_apis_code(self): apis = [] apis_code = [] - + if self.whitelisted_apis: if type(self.whitelisted_apis) == str: - apis = json.loads(self.whitelisted_apis if self.whitelisted_apis else '').get("apis", []) + apis = json.loads( + self.whitelisted_apis if self.whitelisted_apis else "" + ).get("apis", []) else: - apis = self.whitelisted_apis.get("apis", []) if self.whitelisted_apis else [] - + apis = ( + self.whitelisted_apis.get("apis", []) + if self.whitelisted_apis + else [] + ) + for api in apis: # file_content = get_file_content_from_path(self.name, api['file'], api['block_start'], api['block_end'], "project") - file_content = get_code_from_file(api['file'], api['block_start'], api['block_end']) + file_content = get_code_from_file( + api["file"], api["block_start"], api["block_end"] + ) content = file_content.get("file_content", []) content = "".join(content) - apis_code.append({ - 'file': api['file'], - 'path': api['api_path'], - 'function_name': api['name'], - 'code': content - }) + apis_code.append( + { + "file": api["file"], + "path": api["api_path"], + "function_name": api["name"], + "code": content, + } + ) documentation = generate_docs_for_apis(apis_code) - self.documentation= { - "apis": documentation - } + self.documentation = {"apis": documentation} def get_doctype_json(self, doctype_name): if self.doctype_module_map: doctype_module_map = json.loads(self.doctype_module_map) module = doctype_module_map.get(doctype_name) if module: - return get_doctype_json(self.path_to_folder, self.app_name, module, doctype_name) + return get_doctype_json( + self.path_to_folder, self.app_name, module, doctype_name + ) return None def get_doctypes_in_module(self, module): @@ -157,123 +185,148 @@ def on_trash(self): if self.path_to_folder and os.path.exists(self.path_to_folder): shutil.rmtree(self.path_to_folder) + def get_code_from_file(file_path: str, block_start: int, block_end: int): if os.path.isfile(file_path): - file_content = open(file_path, 'r') + file_content = open(file_path, "r") file_content = file_content.readlines() # fetch the block file_content = file_content[block_start:block_end] - return { - "file_content": file_content - } + return {"file_content": file_content} else: frappe.throw("File not found") + def background_fetch_process(project_branch): try: - doc = frappe.get_doc("Commit Project Branch", project_branch) - frappe.publish_realtime('commit_branch_clone_repo', + doc = frappe.get_cached_doc("Commit Project Branch", project_branch) + frappe.publish_realtime( + "commit_branch_clone_repo", { - 'branch_name': doc.branch_name, - 'project': doc.project, - 'text': "Cloning repository...", - 'is_completed': False - }, user=frappe.session.user) - + "branch_name": doc.branch_name, + "project": doc.project, + "text": "Cloning repository...", + "is_completed": False, + }, + user=frappe.session.user, + ) doc.clone_repo() - frappe.publish_realtime('commit_branch_get_modules', + frappe.publish_realtime( + "commit_branch_get_modules", { - 'branch_name': doc.branch_name, - 'project': doc.project, - 'text': "Getting all modules for your app...", - 'is_completed': False - }, user=frappe.session.user) + "branch_name": doc.branch_name, + "project": doc.project, + "text": "Getting all modules for your app...", + "is_completed": False, + }, + user=frappe.session.user, + ) doc.get_modules() - frappe.publish_realtime('commit_branch_find_apis', + frappe.publish_realtime( + "commit_branch_find_apis", { - 'branch_name': doc.branch_name, - 'project': doc.project, - 'text': "Finding all APIs...", - 'is_completed': False - }, user=frappe.session.user) + "branch_name": doc.branch_name, + "project": doc.project, + "text": "Finding all APIs...", + "is_completed": False, + }, + user=frappe.session.user, + ) doc.find_all_apis() - + # doc.get_whitelisted_apis_code() doc.save() - frappe.publish_realtime("commit_project_branch_created", { - 'name': doc.name, - 'branch_name': doc.branch_name, - 'project': doc.project, - 'text': "Branch created successfully.", - 'is_completed': True - }, user=frappe.session.user) + frappe.publish_realtime( + "commit_project_branch_created", + { + "name": doc.name, + "branch_name": doc.branch_name, + "project": doc.project, + "text": "Branch created successfully.", + "is_completed": True, + }, + user=frappe.session.user, + ) except Exception as e: # throw the error and delete the document - messages = [json.dumps({'message' :'There was an error while fetching branch repo.'})] + messages = [ + json.dumps({"message": "There was an error while fetching branch repo."}) + ] frappe.clear_messages() - frappe.publish_realtime('commit_branch_creation_error', + frappe.publish_realtime( + "commit_branch_creation_error", { - 'branch_name': doc.branch_name, - 'project': doc.project, - 'error':{ - "exception": frappe.get_traceback(), - "_server_messages": json.dumps(messages), - }, + "branch_name": doc.branch_name, + "project": doc.project, + "error": { + "exception": frappe.get_traceback(), + "_server_messages": json.dumps(messages), + }, # 'response': handle_exception(e), - 'is_completed': False - }, user=frappe.session.user) + "is_completed": False, + }, + user=frappe.session.user, + ) frappe.delete_doc("Commit Project Branch", project_branch) # frappe.throw("Project Branch not found") frappe.log(frappe.get_traceback()) - + # raise e - + @frappe.whitelist(allow_guest=True) -def fetch_repo(doc, name = None): - if name : - project_branch = frappe.get_doc("Commit Project Branch", name) +def fetch_repo(doc, name=None): + if name: + project_branch = frappe.get_cached_doc("Commit Project Branch", name) else: doc = json.loads(doc) - project_branch = frappe.get_doc("Commit Project Branch", doc.get("name")) + project_branch = frappe.get_cached_doc("Commit Project Branch", doc.get("name")) project_branch.fetch_repo() project_branch.save() return "Hello" def generate_branch_documentation(project_branch): - frappe.publish_realtime('commit_branch_generate_documentation', + frappe.publish_realtime( + "commit_branch_generate_documentation", { - 'branch_name': project_branch, - 'text': "Generating documentation...", - 'is_completed': False - }, user=frappe.session.user) - - doc = frappe.get_doc("Commit Project Branch", project_branch) + "branch_name": project_branch, + "text": "Generating documentation...", + "is_completed": False, + }, + user=frappe.session.user, + ) + + doc = frappe.get_cached_doc("Commit Project Branch", project_branch) doc.get_whitelisted_apis_code() doc.save() - frappe.publish_realtime("commit_branch_generate_documentation", { - 'branch_name': doc.branch_name, - 'project': doc.project, - 'text': "Documentation generated successfully.", - 'is_completed': True - }, user=frappe.session.user) + frappe.publish_realtime( + "commit_branch_generate_documentation", + { + "branch_name": doc.branch_name, + "project": doc.project, + "text": "Documentation generated successfully.", + "is_completed": True, + }, + user=frappe.session.user, + ) return "Documentation generated successfully" + @frappe.whitelist(allow_guest=True) def get_module_doctype_map_for_branches(branches: str): branches = json.loads(branches) module_doctypes_map = {} for branch in branches: - project_branch = frappe.get_doc("Commit Project Branch", branch) + project_branch = frappe.get_cached_doc("Commit Project Branch", branch) module_doctypes_map[branch] = json.loads(project_branch.module_doctypes_map) - return module_doctypes_map \ No newline at end of file + return module_doctypes_map diff --git a/commit/commit/doctype/commit_project_branch/test_commit_project_branch.py b/commit/commit/doctype/commit_project_branch/test_commit_project_branch.py index 42efd7f..00fa998 100644 --- a/commit/commit/doctype/commit_project_branch/test_commit_project_branch.py +++ b/commit/commit/doctype/commit_project_branch/test_commit_project_branch.py @@ -6,4 +6,4 @@ class TestCommitProjectBranch(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/commit_settings/commit_settings.json b/commit/commit/doctype/commit_settings/commit_settings.json index 72b4087..65806e2 100644 --- a/commit/commit/doctype/commit_settings/commit_settings.json +++ b/commit/commit/doctype/commit_settings/commit_settings.json @@ -57,4 +57,4 @@ "sort_field": "modified", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/commit_settings/commit_settings.py b/commit/commit/doctype/commit_settings/commit_settings.py index 753d7d0..6d183cc 100644 --- a/commit/commit/doctype/commit_settings/commit_settings.py +++ b/commit/commit/doctype/commit_settings/commit_settings.py @@ -6,4 +6,4 @@ class CommitSettings(Document): - pass + pass diff --git a/commit/commit/doctype/commit_settings/test_commit_settings.py b/commit/commit/doctype/commit_settings/test_commit_settings.py index 5608e8f..83d8e8d 100644 --- a/commit/commit/doctype/commit_settings/test_commit_settings.py +++ b/commit/commit/doctype/commit_settings/test_commit_settings.py @@ -6,4 +6,4 @@ class TestCommitSettings(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/github_settings/github_settings.json b/commit/commit/doctype/github_settings/github_settings.json index b12df7c..364abf4 100644 --- a/commit/commit/doctype/github_settings/github_settings.json +++ b/commit/commit/doctype/github_settings/github_settings.json @@ -83,4 +83,4 @@ "sort_field": "modified", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/github_settings/github_settings.py b/commit/commit/doctype/github_settings/github_settings.py index 331253e..c643183 100644 --- a/commit/commit/doctype/github_settings/github_settings.py +++ b/commit/commit/doctype/github_settings/github_settings.py @@ -1,10 +1,11 @@ # Copyright (c) 2023, The Commit Company and contributors # For license information, please see license.txt +import json + import frappe -from frappe.model.document import Document import requests -import json +from frappe.model.document import Document class GithubSettings(Document): @@ -12,35 +13,35 @@ class GithubSettings(Document): session = requests.Session() -session.headers.update({'Accept': 'application/json'}) +session.headers.update({"Accept": "application/json"}) @frappe.whitelist(allow_guest=True) def authenticate_user(code, state=None): - '''API to authenticate the user with GitHub''' + """API to authenticate the user with GitHub""" response = get_access_token(code) if response: - user_data = get_user_details(response.get('access_token')) + user_data = get_user_details(response.get("access_token")) if user_data: user = create_user(user_data) def get_access_token(code): - '''Get the access token from GitHub''' - ''' + """Get the access token from GitHub""" + """ 1. Make a POST request to GitHub to get the access token 2. Return the access token - ''' - github_settings = frappe.get_doc("Github Settings") + """ + github_settings = frappe.get_cached_doc("Github Settings") client_id = github_settings.client_id - client_secret = github_settings.get_password('client_secret') + client_secret = github_settings.get_password("client_secret") token_url = github_settings.token_uri data = { - 'client_id': client_id, - 'client_secret': client_secret, - 'code': code, + "client_id": client_id, + "client_secret": client_secret, + "code": code, } - headers = {'Accept': 'application/json'} + headers = {"Accept": "application/json"} response = requests.post(token_url, data=data, headers=headers) return response.json() @@ -48,36 +49,42 @@ def get_access_token(code): def get_user_details(access_token): user_response = requests.get( - 'https://api.github.com/user', headers={'Authorization': 'token ' + access_token}) + "https://api.github.com/user", + headers={"Authorization": "token " + access_token}, + ) user_data = {} if user_response.status_code == 200 and user_response.json(): email_response = requests.get( - 'https://api.github.com/user/emails', headers={'Authorization': 'token ' + access_token}) - user_data = {"user_details": user_response.json( - ), "email_details": email_response.json()} + "https://api.github.com/user/emails", + headers={"Authorization": "token " + access_token}, + ) + user_data = { + "user_details": user_response.json(), + "email_details": email_response.json(), + } return user_data def create_user(user_data): - '''Create a user in the system''' - ''' + """Create a user in the system""" + """ 1. Get the user details from GitHub 2. Create a user in the system 3. Return the user details - ''' + """ user = frappe.new_doc("User") - user.first_name = user_data.get('user_details').get('name').split()[0] - user.last_name = user_data.get('user_details').get('name').split()[1] - user.email = user_data.get('email_details')[0].get('email') - user.username = user_data.get('user_details').get('login') - user.user_image = user_data.get('user_details').get('avatar_url') - user.bio = user_data.get('user_details').get('bio') - user.location = user_data.get('user_details').get('location') + user.first_name = user_data.get("user_details").get("name").split()[0] + user.last_name = user_data.get("user_details").get("name").split()[1] + user.email = user_data.get("email_details")[0].get("email") + user.username = user_data.get("user_details").get("login") + user.user_image = user_data.get("user_details").get("avatar_url") + user.bio = user_data.get("user_details").get("bio") + user.location = user_data.get("user_details").get("location") user.new_password = frappe.generate_hash() user.enabled = 1 - user.user_type = 'Website User' + user.user_type = "Website User" user.insert(ignore_permissions=True) frappe.db.commit() return user diff --git a/commit/commit/doctype/github_settings/test_github_settings.py b/commit/commit/doctype/github_settings/test_github_settings.py index 5edb028..7f692da 100644 --- a/commit/commit/doctype/github_settings/test_github_settings.py +++ b/commit/commit/doctype/github_settings/test_github_settings.py @@ -6,4 +6,4 @@ class TestGithubSettings(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/github_token/github_token.json b/commit/commit/doctype/github_token/github_token.json index 28ecdd3..953df68 100644 --- a/commit/commit/doctype/github_token/github_token.json +++ b/commit/commit/doctype/github_token/github_token.json @@ -81,4 +81,4 @@ "sort_field": "modified", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/github_token/github_token.py b/commit/commit/doctype/github_token/github_token.py index 09c589e..8bfb447 100644 --- a/commit/commit/doctype/github_token/github_token.py +++ b/commit/commit/doctype/github_token/github_token.py @@ -4,5 +4,6 @@ # import frappe from frappe.model.document import Document + class GithubToken(Document): - pass + pass diff --git a/commit/commit/doctype/github_token/test_github_token.py b/commit/commit/doctype/github_token/test_github_token.py index 757f3c3..5b09445 100644 --- a/commit/commit/doctype/github_token/test_github_token.py +++ b/commit/commit/doctype/github_token/test_github_token.py @@ -6,4 +6,4 @@ class TestGithubToken(FrappeTestCase): - pass + pass diff --git a/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.json b/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.json index 5749938..f8531fc 100644 --- a/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.json +++ b/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.json @@ -30,4 +30,4 @@ "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.py b/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.py index 296d3bf..dc0c8aa 100644 --- a/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.py +++ b/commit/commit/doctype/linked_commit_docs_page/linked_commit_docs_page.py @@ -6,4 +6,4 @@ class LinkedCommitDocsPage(Document): - pass + pass diff --git a/commit/commit/doctype/open_ai_settings/open_ai_settings.json b/commit/commit/doctype/open_ai_settings/open_ai_settings.json index 75aa9c0..d6bd36d 100644 --- a/commit/commit/doctype/open_ai_settings/open_ai_settings.json +++ b/commit/commit/doctype/open_ai_settings/open_ai_settings.json @@ -53,4 +53,4 @@ "sort_field": "creation", "sort_order": "DESC", "states": [] -} \ No newline at end of file +} diff --git a/commit/commit/doctype/open_ai_settings/open_ai_settings.py b/commit/commit/doctype/open_ai_settings/open_ai_settings.py index 825edff..a4ff5e9 100644 --- a/commit/commit/doctype/open_ai_settings/open_ai_settings.py +++ b/commit/commit/doctype/open_ai_settings/open_ai_settings.py @@ -7,14 +7,14 @@ class OpenAISettings(Document): - pass + pass def open_ai_call(message): # 1. Get the organization ID and API key from Open API Settings open_ai = frappe.get_single("Open AI Settings") org_id = open_ai.organization - api_key = open_ai.get_password('api_key') + api_key = open_ai.get_password("api_key") if not org_id or not api_key: frappe.throw("Please set the organization ID and API key in Open API Settings") @@ -23,12 +23,12 @@ def open_ai_call(message): client = OpenAI(organization=org_id, api_key=api_key) # 2. Make the API call to Open AI - response = client.chat.completions.create( - model="gpt-3.5-turbo", - messages=message, - max_tokens=3900, - temperature=0.3, # Lower temperature for more deterministic output - stop=["Function Name:", "\n\n"] # Stop sequence to separate functions + response = client.chat.completions.create( + model="gpt-3.5-turbo", + messages=message, + max_tokens=3900, + temperature=0.3, # Lower temperature for more deterministic output + stop=["Function Name:", "\n\n"], # Stop sequence to separate functions ) - return response.choices[0].message.content \ No newline at end of file + return response.choices[0].message.content diff --git a/commit/commit/doctype/open_ai_settings/test_open_ai_settings.py b/commit/commit/doctype/open_ai_settings/test_open_ai_settings.py index fbb9e62..d8b3e20 100644 --- a/commit/commit/doctype/open_ai_settings/test_open_ai_settings.py +++ b/commit/commit/doctype/open_ai_settings/test_open_ai_settings.py @@ -6,4 +6,4 @@ class TestOpenAISettings(FrappeTestCase): - pass + pass diff --git a/commit/fixtures/server_script.json b/commit/fixtures/server_script.json index 7eb3f2b..af49a3f 100644 --- a/commit/fixtures/server_script.json +++ b/commit/fixtures/server_script.json @@ -15,7 +15,7 @@ "rate_limit_count": 5, "rate_limit_seconds": 86400, "reference_doctype": null, - "script": "commit_branches_daily = frappe.get_list(\"Commit Project Branch\", filters={\"frequency\": \"Daily\"}, pluck='name')\n\nfor branch in commit_branches_daily :\n branch_doc = frappe.get_doc(\"Commit Project Branch\", branch)\n branch_doc.fetch_repo()\n branch_doc.save()\n \nfrappe.db.commit()", + "script": "commit_branches_daily = frappe.get_list(\"Commit Project Branch\", filters={\"frequency\": \"Daily\"}, pluck='name')\n\nfor branch in commit_branches_daily :\n branch_doc = frappe.get_cached_doc(\"Commit Project Branch\", branch)\n branch_doc.fetch_repo()\n branch_doc.save()\n \nfrappe.db.commit()", "script_type": "Scheduler Event" }, { @@ -34,7 +34,7 @@ "rate_limit_count": 5, "rate_limit_seconds": 86400, "reference_doctype": null, - "script": "commit_branches_weekly = frappe.get_list(\"Commit Project Branch\", filters={\"frequency\" : \"Weekly\"}, pluck=\"name\")\n\n\nfor branch in commit_branches_weekly:\n branch_doc = frappe.get_doc(\"Commit Project Branch\", branch)\n branch_doc.fetch_repo()\n branch_doc.save()\n\nfrappe.db.commit()", + "script": "commit_branches_weekly = frappe.get_list(\"Commit Project Branch\", filters={\"frequency\" : \"Weekly\"}, pluck=\"name\")\n\n\nfor branch in commit_branches_weekly:\n branch_doc = frappe.get_cached_doc(\"Commit Project Branch\", branch)\n branch_doc.fetch_repo()\n branch_doc.save()\n\nfrappe.db.commit()", "script_type": "Scheduler Event" }, { @@ -53,7 +53,7 @@ "rate_limit_count": 5, "rate_limit_seconds": 86400, "reference_doctype": null, - "script": "commit_branches_monthly = frappe.get_list(\"Commit Project Branch\", filters={\"frequency\" : \"Monthly\"}, pluck = \"name\")\n\nfor branch in commit_branches_monthly:\n branch_doc = frappe.get_doc(\"Commit Project Branch\", branch)\n branch_doc.fetch_repo()\n branch_doc.save()\n\nfrappe.db.commit()", + "script": "commit_branches_monthly = frappe.get_list(\"Commit Project Branch\", filters={\"frequency\" : \"Monthly\"}, pluck = \"name\")\n\nfor branch in commit_branches_monthly:\n branch_doc = frappe.get_cached_doc(\"Commit Project Branch\", branch)\n branch_doc.fetch_repo()\n branch_doc.save()\n\nfrappe.db.commit()", "script_type": "Scheduler Event" } -] \ No newline at end of file +] diff --git a/commit/hooks.py b/commit/hooks.py index e408d86..30e8f15 100644 --- a/commit/hooks.py +++ b/commit/hooks.py @@ -42,7 +42,7 @@ # website user home page (by Role) # role_home_page = { -# "Role": "home_page" +# "Role": "home_page" # } # Generators @@ -56,8 +56,8 @@ # add methods and filters to jinja environment # jinja = { -# "methods": "commit.utils.jinja_methods", -# "filters": "commit.utils.jinja_filters" +# "methods": "commit.utils.jinja_methods", +# "filters": "commit.utils.jinja_filters" # } # Installation @@ -83,11 +83,11 @@ # Permissions evaluated in scripted ways # permission_query_conditions = { -# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", +# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", # } # # has_permission = { -# "Event": "frappe.desk.doctype.event.event.has_permission", +# "Event": "frappe.desk.doctype.event.event.has_permission", # } # DocType Class @@ -95,7 +95,7 @@ # Override standard doctype classes # override_doctype_class = { -# "ToDo": "custom_app.overrides.CustomToDo" +# "ToDo": "custom_app.overrides.CustomToDo" # } # Document Events @@ -103,32 +103,32 @@ # Hook on document methods and events # doc_events = { -# "*": { -# "on_update": "method", -# "on_cancel": "method", -# "on_trash": "method" -# } +# "*": { +# "on_update": "method", +# "on_cancel": "method", +# "on_trash": "method" +# } # } # Scheduled Tasks # --------------- # scheduler_events = { -# "all": [ -# "commit.tasks.all" -# ], -# "daily": [ -# "commit.tasks.daily" -# ], -# "hourly": [ -# "commit.tasks.hourly" -# ], -# "weekly": [ -# "commit.tasks.weekly" -# ], -# "monthly": [ -# "commit.tasks.monthly" -# ], +# "all": [ +# "commit.tasks.all" +# ], +# "daily": [ +# "commit.tasks.daily" +# ], +# "hourly": [ +# "commit.tasks.hourly" +# ], +# "weekly": [ +# "commit.tasks.weekly" +# ], +# "monthly": [ +# "commit.tasks.monthly" +# ], # } # Testing @@ -140,14 +140,14 @@ # ------------------------------ # # override_whitelisted_methods = { -# "frappe.desk.doctype.event.event.get_events": "commit.event.get_events" +# "frappe.desk.doctype.event.event.get_events": "commit.event.get_events" # } # # each overriding function accepts a `data` argument; # generated from the base implementation of the doctype dashboard, # along with any modifications made in other Frappe apps # override_doctype_dashboards = { -# "Task": "commit.task.get_dashboard_data" +# "Task": "commit.task.get_dashboard_data" # } # exempt linked doctypes from being automatically cancelled @@ -173,32 +173,35 @@ # -------------------- # user_data_fields = [ -# { -# "doctype": "{doctype_1}", -# "filter_by": "{filter_by}", -# "redact_fields": ["{field_1}", "{field_2}"], -# "partial": 1, -# }, -# { -# "doctype": "{doctype_2}", -# "filter_by": "{filter_by}", -# "partial": 1, -# }, -# { -# "doctype": "{doctype_3}", -# "strict": False, -# }, -# { -# "doctype": "{doctype_4}" -# } +# { +# "doctype": "{doctype_1}", +# "filter_by": "{filter_by}", +# "redact_fields": ["{field_1}", "{field_2}"], +# "partial": 1, +# }, +# { +# "doctype": "{doctype_2}", +# "filter_by": "{filter_by}", +# "partial": 1, +# }, +# { +# "doctype": "{doctype_3}", +# "strict": False, +# }, +# { +# "doctype": "{doctype_4}" +# } # ] # Authentication and authorization # -------------------------------- # auth_hooks = [ -# "commit.auth.validate" +# "commit.auth.validate" # ] -fixtures = [{"doctype": "Server Script", "filters": [["module" , "in" , ("commit" )]]}] +fixtures = [{"doctype": "Server Script", "filters": [["module", "in", ("commit")]]}] -website_route_rules = [{'from_route': '/commit-docs/', 'to_route': 'commit-docs'}, {'from_route': '/commit/', 'to_route': 'commit'}] \ No newline at end of file +website_route_rules = [ + {"from_route": "/commit-docs/", "to_route": "commit-docs"}, + {"from_route": "/commit/", "to_route": "commit"}, +] diff --git a/commit/modules.txt b/commit/modules.txt index fcad765..01f9a2a 100644 --- a/commit/modules.txt +++ b/commit/modules.txt @@ -1 +1 @@ -commit \ No newline at end of file +commit diff --git a/commit/utils/api_analysis.py b/commit/utils/api_analysis.py index 414dcb6..33c9269 100644 --- a/commit/utils/api_analysis.py +++ b/commit/utils/api_analysis.py @@ -1,45 +1,51 @@ import re + def get_api_details_from_file_contents(file_contents: str, file_path: str): - ''' + """ Get list of all whitelisted API in a file string with: 1. Type 2. Path 3. Method name 4. Arguments 5. Python code snippet - ''' + """ whitelist_indexes = find_all_mentions_of_whitelist_in_file(file_contents) # TODO: Get whitelist type (e.g. methods, rate_limit, etc.) - api_details = get_api_content_from_file_contents(file_contents, whitelist_indexes, file_path) + api_details = get_api_content_from_file_contents( + file_contents, whitelist_indexes, file_path + ) return api_details - # return "{}:{}".format(base_path, indexes) def convert_file_path_to_api_path(file_path: str): - ''' + """ Convert file path to API path - ''' + """ return file_path.replace("/", ".").replace(".py", "") + def find_all_mentions_of_whitelist_in_file(file_contents: str): - ''' + """ Find all mentions of @frappe.whitelist() in a file - ''' + """ - indexes = [m.start() for m in re.finditer('@frappe.whitelist', file_contents)] + indexes = [m.start() for m in re.finditer("@frappe.whitelist", file_contents)] return indexes -def get_api_content_from_file_contents(file_contents: str, indexes: list, file_path: str): - ''' + +def get_api_content_from_file_contents( + file_contents: str, indexes: list, file_path: str +): + """ Get API name from file contents - ''' + """ # Loop over to find the first mention of "def" after the indexes base_path = convert_file_path_to_api_path(file_path) api_string = [] @@ -59,7 +65,7 @@ def get_api_content_from_file_contents(file_contents: str, indexes: list, file_p api_content = "" indentation_of_def = "" if index_of_colon != -1: - api_def = file_contents[index_of_def + 4:index_of_colon] + api_def = file_contents[index_of_def + 4 : index_of_colon] # Need to find the start and end of the API function @@ -68,7 +74,9 @@ def get_api_content_from_file_contents(file_contents: str, indexes: list, file_p index_of_newline_before_def = file_contents.rfind("\n", 0, index_of_def) api_content = index_of_newline_before_def # Get the indentation string between the \n and the def - indentation_of_def = file_contents[index_of_newline_before_def + 1:index_of_def] + indentation_of_def = file_contents[ + index_of_newline_before_def + 1 : index_of_def + ] if indentation_of_def == "": # No indentation. Find first line after def that has no indentation pass @@ -78,31 +86,69 @@ def get_api_content_from_file_contents(file_contents: str, indexes: list, file_p # Find the next line containing the same number of indentation if api_def: - api_string.append({ - "function_def": api_def, - "content": api_content, - "indentation": indentation_of_def, - "name": extract_name_from_def(api_def), - "arguments": extract_arguments_from_def(api_def), - "path": base_path, - "file_path": file_path, - **whitelist_properties, - }) - + api_string.append( + { + "function_def": api_def, + "content": api_content, + "indentation": indentation_of_def, + "name": extract_name_from_def(api_def), + "arguments": extract_arguments_from_def(api_def), + "path": base_path, + "file_path": file_path, + **whitelist_properties, + } + ) + return api_string def extract_name_from_def(api_def: str): - ''' + """ Extract name from def - ''' + """ return api_def.split("(")[0].strip() + +def _split_params_by_comma(params_str: str) -> list: + """ + Split parameter string by top-level commas, ignoring commas inside [], (), {}. + """ + parts = [] + current = [] + open_brackets = [] # stack of opening bracket chars + bracket_pairs = {"[": "]", "(": ")", "{": "}"} + i = 0 + while i < len(params_str): + c = params_str[i] + if c in bracket_pairs: + open_brackets.append(c) + current.append(c) + i += 1 + elif open_brackets and c == bracket_pairs[open_brackets[-1]]: + open_brackets.pop() + current.append(c) + i += 1 + elif c == "," and not open_brackets: + parts.append("".join(current).strip()) + current = [] + i += 1 + else: + current.append(c) + i += 1 + if current: + parts.append("".join(current).strip()) + return parts + + def extract_arguments_from_def(api_def: str): - ''' + """ Extract arguments from def - ''' - arguments_with_types_defaults = api_def.split("(")[1].split(")")[0].split(",") + """ + if "(" not in api_def or ")" not in api_def: + arguments_with_types_defaults = [] + else: + params_str = api_def.split("(")[1].split(")")[0] + arguments_with_types_defaults = _split_params_by_comma(params_str) arguments = [] for arg in arguments_with_types_defaults: @@ -111,42 +157,47 @@ def extract_arguments_from_def(api_def: str): argument = "" type = "" if "=" in argument_with_types_default: - default_split = argument_with_types_default.split("=") - default = default_split[1].strip().replace('"', '').replace("'", "") + default_split = argument_with_types_default.split("=", 1) + default = default_split[1].strip().replace('"', "").replace("'", "") argument = default_split[0].strip() else: argument = argument_with_types_default if ":" in argument: - type = argument.split(":")[1].strip() - argument = argument.split(":")[0].strip() - arguments.append({ - "argument": argument, - "type": type, - "default": default - }) + name_type = argument.split(":", 1) + argument = name_type[0].strip() + type = name_type[1].strip() + arguments.append({"argument": argument, "type": type, "default": default}) return arguments + def parse_whitelist(whitelisted_content: str): - ''' + """ Input being @frappe.whitelist() with args, find request type and other params - ''' + """ args = whitelisted_content.split("(")[1].split(")")[0].split(",") request_types = [] xss_safe = False allow_guest = False for arg in args: if "methods" in arg: - request_types = arg.split("=")[1].replace("[", "").replace("]", "").replace('"', '').replace("'", "").split(",") - + request_types = ( + arg.split("=")[1] + .replace("[", "") + .replace("]", "") + .replace('"', "") + .replace("'", "") + .split(",") + ) + if "xss_safe" in arg: xss_safe = arg.split("=")[1].strip() == "True" - + if "allow_guest" in arg: allow_guest = arg.split("=")[1].strip() == "True" - + return { "request_types": request_types, "xss_safe": xss_safe, - "allow_guest": allow_guest - } \ No newline at end of file + "allow_guest": allow_guest, + } diff --git a/commit/utils/conversions.py b/commit/utils/conversions.py index 6d2ad0a..8a42005 100644 --- a/commit/utils/conversions.py +++ b/commit/utils/conversions.py @@ -1,6 +1,6 @@ def convert_module_name(module: str): - ''' + """ Convert module name to frappe module path name Replace spaces with underscores and convert to lowercase - ''' - return module.replace(" ", "_").lower() \ No newline at end of file + """ + return module.replace(" ", "_").lower() diff --git a/commit/www/commit-docs.html b/commit/www/commit-docs.html index 4865774..207c1e0 100644 --- a/commit/www/commit-docs.html +++ b/commit/www/commit-docs.html @@ -6,8 +6,8 @@ Docs - - + + @@ -15,4 +15,4 @@ - \ No newline at end of file + diff --git a/commit/www/commit.py b/commit/www/commit.py index 58ba352..87d2a0b 100644 --- a/commit/www/commit.py +++ b/commit/www/commit.py @@ -1,15 +1,21 @@ -import frappe import json -import frappe.sessions import re + +import frappe +import frappe.sessions + from commit.api.meta_data import get_installed_apps -from commit.commit.doctype.commit_docs.commit_docs import get_all_commit_docs_detail, get_commit_docs_list +from commit.commit.doctype.commit_docs.commit_docs import ( + get_all_commit_docs_detail, + get_commit_docs_list, +) no_cache = 1 SCRIPT_TAG_PATTERN = re.compile(r"\") CLOSING_SCRIPT_TAG_PATTERN = re.compile(r"") + def get_context(context): context = frappe._dict() @@ -18,23 +24,24 @@ def get_context(context): return context -@frappe.whitelist(methods=['POST'], allow_guest=True) + +@frappe.whitelist(methods=["POST"], allow_guest=True) def get_context_for_dev(): - if not frappe.conf.developer_mode: - frappe.throw('This method is only meant for developer mode') - return json.loads(get_boot()) + if not frappe.conf.developer_mode: + frappe.throw("This method is only meant for developer mode") + return json.loads(get_boot()) + def get_boot(): try: boot = frappe.sessions.get() except Exception as e: raise frappe.SessionBootFailed from e - + commit_settings = frappe.get_single("Commit Settings") show_system_apps = commit_settings.show_system_apps - boot["show_system_apps"] = show_system_apps boot["commit_docs_header"] = commit_settings.commit_docs_header boot["commit_docs_description"] = commit_settings.commit_docs_description @@ -49,4 +56,4 @@ def get_boot(): boot_json = CLOSING_SCRIPT_TAG_PATTERN.sub("", boot_json) boot_json = json.dumps(boot_json) - return boot_json \ No newline at end of file + return boot_json diff --git a/commit/www/docs.html b/commit/www/docs.html index 3ce117e..92bfe1a 100644 --- a/commit/www/docs.html +++ b/commit/www/docs.html @@ -15,4 +15,4 @@ - \ No newline at end of file + diff --git a/dashboard/.env.production b/dashboard/.env.production index b61e099..cd2530c 100644 --- a/dashboard/.env.production +++ b/dashboard/.env.production @@ -1 +1 @@ -VITE_BASE_PATH='/commit' \ No newline at end of file +VITE_BASE_PATH='/commit' diff --git a/dashboard/components.json b/dashboard/components.json index 88a9a6e..1cd599c 100644 --- a/dashboard/components.json +++ b/dashboard/components.json @@ -13,4 +13,4 @@ "components": "@/components", "utils": "@/lib/utils" } -} \ No newline at end of file +} diff --git a/dashboard/index.html b/dashboard/index.html index 2eaa979..4df138b 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/dashboard/package.json b/dashboard/package.json index dd68aee..18eaf05 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -11,6 +11,7 @@ "copy-html-entry": "cp ../commit/public/commit/index.html ../commit/www/commit.html" }, "dependencies": { + "@codemirror/lang-javascript": "^6.2.3", "@dagrejs/dagre": "^1.0.2", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", @@ -21,6 +22,7 @@ "@hookform/resolvers": "^3.1.1", "@milkdown/crepe": "^7.5.9", "@milkdown/kit": "^7.5.9", + "@milkdown/plugin-upload": "^7.11.0", "@milkdown/react": "^7.5.9", "@milkdown/theme-nord": "^7.5.9", "@radix-ui/react-accordion": "^1.1.2", @@ -45,6 +47,7 @@ "@radix-ui/react-tooltip": "^1.0.6", "@tailwindcss/typography": "^0.5.15", "@tanstack/react-table": "^8.9.3", + "@uiw/react-codemirror": "^4.23.12", "@uiw/react-md-editor": "^4.0.4", "cal-sans": "^1.0.1", "class-variance-authority": "^0.6.1", @@ -53,13 +56,16 @@ "downshift": "^9.0.6", "framer-motion": "^11.11.11", "frappe-react-sdk": "^1.7.0", + "highlight.js": "^11.11.1", "html-to-image": "^1.11.11", "install": "^0.13.0", "jotai": "^2.8.3", "lodash": "^4.17.21", "lodash.isplainobject": "^4.0.6", + "lowlight": "^3.3.0", "lucide-react": "^0.468.0", "moment-timezone": "^0.5.43", + "next-themes": "^0.4.6", "react": "^18.2.0", "react-dom": "^18.2.0", "react-dropzone": "^14.2.3", @@ -70,10 +76,13 @@ "remark-gfm": "^4.0.0", "shadcn-ui": "^0.8.0", "socket.io-client": "^4.5.1", + "sonner": "^2.0.3", "swr": "^2.1.5", "tailwind-merge": "^1.13.2", "tailwindcss-animate": "^1.0.6", + "thememirror": "^2.0.1", "timeago-react": "^3.0.6", + "use-debounce": "^10.0.4", "zod": "^3.21.4" }, "devDependencies": { diff --git a/dashboard/src/components/common/AsyncDropdown/AsyncDropdown.tsx b/dashboard/src/components/common/AsyncDropdown/AsyncDropdown.tsx index dee48cd..b8d15e1 100644 --- a/dashboard/src/components/common/AsyncDropdown/AsyncDropdown.tsx +++ b/dashboard/src/components/common/AsyncDropdown/AsyncDropdown.tsx @@ -28,37 +28,37 @@ interface BaseDropdownProps extends Partial { limit?: number; /** TODO: Should the dropdown allow pagination when the user scrolls. Default: true */ allowPagination?: boolean; - /** + /** * API to call to fetch records. - * + * * Default: `emotive_app.emotive_app.search.search_link` - * + * * If you want to use a custom API, you can pass the path to the API here. - * + * * The API should return a list of documents in the following format: * [{value: string, description: string, label?: string}] - where the value is the ID of the document. - * + * * If the API sends a label, it will be used as the label in the dropdown. - * + * * Refer: Cost Codes query */ searchAPIPath?: string; /** * Field you want to search against in the doctype. - * + * * Default: `name` - * + * * If you want to search against a different field, you can pass the fieldname here. - * + * * If you want to search against multiple fields, you can try using the `searchAPIPath` prop to call a custom API, * or use a custom query in the `customQuery` prop. */ searchfield?: string; - /** + /** * Custom query to be used to fetch records. - * + * * If you want to use a custom query, you can pass the query here. - * + * * The query should be in the following format: * { * query: string, @@ -70,41 +70,41 @@ interface BaseDropdownProps extends Partial { * } */ customQuery?: { - /** Path to function for the query. - * + /** Path to function for the query. + * * Refer: Item/Supplier query */ query: string, /** Filters are usually an object instead of an array in a custom query */ filters?: any, }, - /** + /** * Used for certain queries where a reference doctype is needed. - * + * * For example when searching a supplier in a "Purchase Invoice", the reference_doctype is "Purchase Invoice" - * + * * TODO: This can be auto-filled eventually from FormContext since we will know the doctype of the form. */ reference_doctype?: string, /** * Some doctypes are "creatable" - for example "Item" - * + * * This means that if the user does not find a match, they can create a new record from the dropdown itself. - * + * * A popup will open up with the form to create a new record. - * + * * You can pass in default values for the new record to be created. */ defaultValuesForCreate?: Record, /** Placeholder for the dropdown. Default: `doctype` */ placeholder?: string; - /** - * Should the field be read-only. - * + /** + * Should the field be read-only. + * * The Dropdown takes in the FormContext and automatically sets the field to readOnly if the docstatus is 1 (Submitted) or 2 (Cancelled) - * + * * If `allowOnSubmit` is set to true, the field will be readOnly only if the docstatus is 2 (Cancelled) */ isReadOnly?: boolean; @@ -119,7 +119,7 @@ interface BaseDropdownProps extends Partial { heightAdjust?: boolean; /** * Function to filter the options based on the input value/other criteria. - * + * * For example, you might want to limit the companies shown in the dropdown since they have been already added (like in Cost Codes) */ filterOption?: (option: ResultItem, inputValue: string) => boolean, @@ -128,15 +128,15 @@ interface BaseDropdownProps extends Partial { interface AsyncDropdownProps extends BaseDropdownProps { /** Fieldname */ name: string; - /** + /** * Rules to add for the field to validate input, show errors, and trigger effects onChange/onBlur etc. - * + * * Refer:https://react-hook-form.com/docs/useform/register#options */ rules?: RegisterOptions, - /** + /** * Is the field editable on submit. If true, the field will be readOnly only if the docstatus is 2 (Cancelled) - * + * * Default: false */ allowOnSubmit?: boolean; @@ -146,8 +146,8 @@ interface AsyncDropdownProps extends BaseDropdownProps { * The AsyncDropdown component is used to handle Link fields in any form. * It needs to be used inside a React Hook Form FormProvider. * The component takes in a doctype and a fieldname and returns an input field with a dropdown list of options fetched from the server. - * @param props - * @returns + * @param props + * @returns */ export const AsyncDropdown = ({ doctype, @@ -201,7 +201,7 @@ export const AsyncDropdown = ({ const [, setLinkTitle] = useAtom(setLinkTitleAtom) - const { call: linkTitleCall } = useFrappePostCall('frappe.desk.search.get_link_title') + const { call: linkTitleCall } = useFrappePostCall('commit.api.link.get_link_title') const loadingLinkTitle = useRef(false) @@ -534,8 +534,8 @@ export interface AsyncDropdownWithoutFormProps extends BaseDropdownProps { * The AsyncDropdown component is used to handle Link fields in any form. * It needs to be used inside a React Hook Form FormProvider. * The component takes in a doctype and a fieldname and returns an input field with a dropdown list of options fetched from the server. - * @param props - * @returns + * @param props + * @returns */ export const AsyncDropdownWithoutForm = ({ doctype, @@ -580,7 +580,7 @@ export const AsyncDropdownWithoutForm = ({ const [, setLinkTitle] = useAtom(setLinkTitleAtom) - const { call: linkTitleCall } = useFrappePostCall('emotive_app.api.utils.link.get_link_title') + const { call: linkTitleCall } = useFrappePostCall('commit.api.link.get_link_title') const loadingLinkTitle = useRef(false) @@ -818,4 +818,4 @@ export const AsyncDropdownWithoutForm = ({ ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/AsyncDropdown/LinkTitles.ts b/dashboard/src/components/common/AsyncDropdown/LinkTitles.ts index 2c14f01..e4d0761 100644 --- a/dashboard/src/components/common/AsyncDropdown/LinkTitles.ts +++ b/dashboard/src/components/common/AsyncDropdown/LinkTitles.ts @@ -12,4 +12,4 @@ export const setLinkTitleAtom = atom(null, (get, set, doctype: string, docname: const linkTitles = get(linkTitlesAtom) linkTitles[`${doctype}::${docname}`] = title set(linkTitlesAtom, linkTitles) -}) \ No newline at end of file +}) diff --git a/dashboard/src/components/common/Checkbox/Check.tsx b/dashboard/src/components/common/Checkbox/Check.tsx index 8a023e9..a9ce18d 100644 --- a/dashboard/src/components/common/Checkbox/Check.tsx +++ b/dashboard/src/components/common/Checkbox/Check.tsx @@ -30,4 +30,4 @@ export const Check = ({ name, label, controllerProps, alignWithLabel = false, ru ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Checkbox/CreatableSelect.tsx b/dashboard/src/components/common/Checkbox/CreatableSelect.tsx index 825771e..dc65ba0 100644 --- a/dashboard/src/components/common/Checkbox/CreatableSelect.tsx +++ b/dashboard/src/components/common/Checkbox/CreatableSelect.tsx @@ -110,7 +110,7 @@ export const CreatableSelect = ({ options, selected, className, label, mode = 's } }} > - - ); -}; \ No newline at end of file +}; diff --git a/dashboard/src/components/common/CopyToClipboard/CopyToClipboard.tsx b/dashboard/src/components/common/CopyToClipboard/CopyToClipboard.tsx index 0df317e..3d6ad78 100644 --- a/dashboard/src/components/common/CopyToClipboard/CopyToClipboard.tsx +++ b/dashboard/src/components/common/CopyToClipboard/CopyToClipboard.tsx @@ -52,4 +52,4 @@ export function CopyButton({ ) } -export default CopyButton \ No newline at end of file +export default CopyButton diff --git a/dashboard/src/components/common/ErrorBanner/ErrorBanner.tsx b/dashboard/src/components/common/ErrorBanner/ErrorBanner.tsx index 200e485..5dc34bb 100644 --- a/dashboard/src/components/common/ErrorBanner/ErrorBanner.tsx +++ b/dashboard/src/components/common/ErrorBanner/ErrorBanner.tsx @@ -105,4 +105,4 @@ export const ErrorBanner = ({ error, overrideHeading, ...props }: ErrorBannerPro ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Forms/FormControl/Control.tsx b/dashboard/src/components/common/Forms/FormControl/Control.tsx index 4f01f96..c33e182 100644 --- a/dashboard/src/components/common/Forms/FormControl/Control.tsx +++ b/dashboard/src/components/common/Forms/FormControl/Control.tsx @@ -25,4 +25,4 @@ export const Control = ({ allowOnSubmit, ...props }: ControlProps) => { }, [docstatus, props['aria-readonly'], allowOnSubmit]) return -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Forms/FormControl/FormElement.tsx b/dashboard/src/components/common/Forms/FormControl/FormElement.tsx index 4780cc4..ec8a358 100644 --- a/dashboard/src/components/common/Forms/FormControl/FormElement.tsx +++ b/dashboard/src/components/common/Forms/FormControl/FormElement.tsx @@ -31,7 +31,7 @@ export const FormElement = ({ name, label, children, tooltip, ...props }: FormEl const { errors } = useFormState() - /** + /** * The name can be a path like `items.0.item_code` so we need to split it * and then get the error message from the errors object * */ @@ -65,4 +65,4 @@ export const FormElement = ({ name, label, children, tooltip, ...props }: FormEl export const FormHelperText = ({ children }: { children: React.ReactNode }) => { return
{children}
-} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Forms/FormControl/index.ts b/dashboard/src/components/common/Forms/FormControl/index.ts index c797cde..df550b8 100644 --- a/dashboard/src/components/common/Forms/FormControl/index.ts +++ b/dashboard/src/components/common/Forms/FormControl/index.ts @@ -1,2 +1,2 @@ export * from './Control' -export * from './FormElement' \ No newline at end of file +export * from './FormElement' diff --git a/dashboard/src/components/common/FullPageLoader/SpinnerLoader.tsx b/dashboard/src/components/common/FullPageLoader/SpinnerLoader.tsx index 56f000e..b083543 100644 --- a/dashboard/src/components/common/FullPageLoader/SpinnerLoader.tsx +++ b/dashboard/src/components/common/FullPageLoader/SpinnerLoader.tsx @@ -58,4 +58,4 @@ export const SpinnerLoader = ({ className, style }: SpinnerLoaderProps) => { > ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Header.tsx b/dashboard/src/components/common/Header.tsx index f60b0fc..d4f8afb 100644 --- a/dashboard/src/components/common/Header.tsx +++ b/dashboard/src/components/common/Header.tsx @@ -12,4 +12,4 @@ export const Header = ({ text }: { text?: string }) => { ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Icons.ts b/dashboard/src/components/common/Icons.ts index 45e3cbf..5b31479 100644 --- a/dashboard/src/components/common/Icons.ts +++ b/dashboard/src/components/common/Icons.ts @@ -44,5 +44,3 @@ export const ICON_KEY_MAP: Record = { 'Text Editor': Pencil as any, 'Time': Clock3 as any, } - - diff --git a/dashboard/src/components/common/ImageUploader2/DocumentUploadModal.tsx b/dashboard/src/components/common/ImageUploader2/DocumentUploadModal.tsx index 7590496..3dff27e 100644 --- a/dashboard/src/components/common/ImageUploader2/DocumentUploadModal.tsx +++ b/dashboard/src/components/common/ImageUploader2/DocumentUploadModal.tsx @@ -79,7 +79,7 @@ const UploadModalContent = ({ doctype, docname, fieldname, maxFiles, accept, max doctype: doctype, docname: docname, fieldname: fieldname, - isPrivate: isPrivate + isPrivate: isPrivate }).then(res => res) .catch((e) => { const serverMessage = JSON.parse(JSON.parse(e._server_messages)[0]) @@ -148,4 +148,4 @@ const UploadModalContent = ({ doctype, docname, fieldname, maxFiles, accept, max ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/ImageUploader2/FileDrop.tsx b/dashboard/src/components/common/ImageUploader2/FileDrop.tsx index 121eb6c..6057994 100644 --- a/dashboard/src/components/common/ImageUploader2/FileDrop.tsx +++ b/dashboard/src/components/common/ImageUploader2/FileDrop.tsx @@ -29,7 +29,7 @@ export interface FileDropProps extends React.HTMLAttributes { /** * File uploader with Drag 'n' Drop Zone - * + * * It encompasses Box component, so all Box props can be used. */ export const FileDrop = ({ files, onFileChange, maxFiles = 1, uploading, accept, showList = true, maxFileSize, camera = false, linkAttachment = false, ...props }: FileDropProps) => { @@ -150,7 +150,7 @@ export const FileListItem = ({ file, removeFile, isUploading, ...props }: FileLi /** * Hook takes in a file and returns a blob URL for previewing the file if image - * @param file + * @param file * @returns File url */ export const useGetFilePreviewUrl = (file: CustomFile): string => { @@ -180,4 +180,4 @@ export const useGetFilePreviewUrl = (file: CustomFile): string => { }, [file]) return url -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/ImageUploader2/ImageUploader.tsx b/dashboard/src/components/common/ImageUploader2/ImageUploader.tsx index 5a081ca..7ef5c80 100644 --- a/dashboard/src/components/common/ImageUploader2/ImageUploader.tsx +++ b/dashboard/src/components/common/ImageUploader2/ImageUploader.tsx @@ -59,7 +59,7 @@ interface ImageUploaderProps extends React.HTMLAttributes { /** * File uploader with Drag 'n' Drop Zone - * + * * It encompasses Box component, so all Box props can be used. */ export const ImageUploader = ({ file, doctype, docname, onUpdate, fieldname = 'image', icon, accept = { 'image/*': ['.jpeg', '.jpg', '.png'] }, maxFileSize, boxSize = 120, defaultFile, borderRadius = "50%", ...props }: ImageUploaderProps) => { @@ -195,4 +195,4 @@ export const DeleteModal = ({ isOpen, onClose, onDelete }: { isOpen: boolean, on ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Label/Label.tsx b/dashboard/src/components/common/Label/Label.tsx index 3149d2a..506ab0b 100644 --- a/dashboard/src/components/common/Label/Label.tsx +++ b/dashboard/src/components/common/Label/Label.tsx @@ -13,4 +13,4 @@ export const Label = ({ label, ...props }: FormLabelProps) => { ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/Label/index.ts b/dashboard/src/components/common/Label/index.ts index d0ac8fd..717144f 100644 --- a/dashboard/src/components/common/Label/index.ts +++ b/dashboard/src/components/common/Label/index.ts @@ -1 +1 @@ -export { Label } from './Label' \ No newline at end of file +export { Label } from './Label' diff --git a/dashboard/src/components/common/MarkdownEditor/MarkdownEditor.tsx b/dashboard/src/components/common/MarkdownEditor/MarkdownEditor.tsx index 7a22fee..b779c3c 100644 --- a/dashboard/src/components/common/MarkdownEditor/MarkdownEditor.tsx +++ b/dashboard/src/components/common/MarkdownEditor/MarkdownEditor.tsx @@ -4,34 +4,69 @@ import '@milkdown/crepe/theme/frame.css'; import { useEffect } from 'react'; import { Editor } from '@milkdown/kit/core'; import './markdown.css' +import { useFrappeFileUpload } from 'frappe-react-sdk'; +import { languages } from '@codemirror/language-data' +import { javascript } from '@codemirror/lang-javascript'; +import { LanguageDescription } from '@codemirror/language'; export interface MarkdownEditorProps { value: string; - setCrepeInstance: React.Dispatch | null>> + setCrepeInstance: React.Dispatch | null>>, + docname: string; } -const MarkdownEditor = ({ value, setCrepeInstance }: MarkdownEditorProps) => { +const reactLanguage = LanguageDescription.of({ + name: 'React', + alias: ['jsx', 'react'], + extensions: ['.jsx', '.tsx'], + load: () => Promise.resolve(javascript({ jsx: true, typescript: true })), +}); + +const MarkdownEditor = ({ value, setCrepeInstance, docname }: MarkdownEditorProps) => { + + const { upload } = useFrappeFileUpload(); useEffect(() => { const crepe = new Crepe({ root: '#editor', defaultValue: value, - }).create() + featureConfigs: { + 'image-block': { + onUpload: async (file: File) => { + const result = await upload(file, { + doctype: 'Commit Docs Page', + docname: docname, + isPrivate: false, + }); + + if (!result || !result.file_url) { + throw new Error('Upload failed'); + } + + return result.file_url; + }, + }, + 'code-mirror': { + languages: [ + ...languages, + reactLanguage + ] + } + + }, + }).create(); + setCrepeInstance(crepe); return () => { - crepe.then((editor) => { - editor.destroy(); - }); + crepe.then((editor) => editor.destroy()); }; }, []); - return (
- {/* The editor will be initialized here */}
); }; -export default MarkdownEditor \ No newline at end of file +export default MarkdownEditor diff --git a/dashboard/src/components/common/MarkdownEditor/markdown.css b/dashboard/src/components/common/MarkdownEditor/markdown.css index 7bbf3ba..e45121b 100644 --- a/dashboard/src/components/common/MarkdownEditor/markdown.css +++ b/dashboard/src/components/common/MarkdownEditor/markdown.css @@ -4,4 +4,4 @@ .milkdown .ProseMirror h1, .milkdown .ProseMirror h2, .milkdown .ProseMirror h3, .milkdown .ProseMirror h4, .milkdown .ProseMirror h5, .milkdown .ProseMirror h6 { font-family: inherit; font-weight: 600; -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/MarkdownRenderer/MarkdownRenderer.tsx b/dashboard/src/components/common/MarkdownRenderer/MarkdownRenderer.tsx index 100df5a..86d0ffd 100644 --- a/dashboard/src/components/common/MarkdownRenderer/MarkdownRenderer.tsx +++ b/dashboard/src/components/common/MarkdownRenderer/MarkdownRenderer.tsx @@ -9,4 +9,4 @@ export const MarkdownRenderer: React.FC = (props) => { return -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/MarkdownRenderer/MarkdownRendererSuspense.tsx b/dashboard/src/components/common/MarkdownRenderer/MarkdownRendererSuspense.tsx index 22e7cc6..6471abe 100644 --- a/dashboard/src/components/common/MarkdownRenderer/MarkdownRendererSuspense.tsx +++ b/dashboard/src/components/common/MarkdownRenderer/MarkdownRendererSuspense.tsx @@ -18,4 +18,4 @@ const MarkdownRendererSuspense: React.FC = ({ content, cl } -export default MarkdownRendererSuspense \ No newline at end of file +export default MarkdownRendererSuspense diff --git a/dashboard/src/components/common/MarkdownRenderer/markdown.css b/dashboard/src/components/common/MarkdownRenderer/markdown.css index 78a0741..32807f4 100644 --- a/dashboard/src/components/common/MarkdownRenderer/markdown.css +++ b/dashboard/src/components/common/MarkdownRenderer/markdown.css @@ -24,4 +24,4 @@ .ql-snow .ql-picker.ql-size .ql-picker-label::before, .ql-snow .ql-picker.ql-size .ql-picker-item::before { content: attr(data-value); -} \ No newline at end of file +} diff --git a/dashboard/src/components/common/PageNotFound/PageNotFound.tsx b/dashboard/src/components/common/PageNotFound/PageNotFound.tsx index 2e097d5..6dbb6fd 100644 --- a/dashboard/src/components/common/PageNotFound/PageNotFound.tsx +++ b/dashboard/src/components/common/PageNotFound/PageNotFound.tsx @@ -47,6 +47,7 @@ const PageNotFound = () => { - - - +
+ + + + + + + Download OpenAPI spec + + Set the base URL for the API. It will be used in the spec as the default server so tools like Bruno use the correct domain. + + +
+ + setOpenApiBaseUrl(e.target.value)} + /> +
+ + + + +
+
+ + + + + + +
@@ -161,4 +263,4 @@ export const ListView = ({ list, setSelectedEndpoint, selectedEndpoint, searchQu ) } -export default APIList \ No newline at end of file +export default APIList diff --git a/dashboard/src/components/features/commands/CommandsContent.tsx b/dashboard/src/components/features/commands/CommandsContent.tsx index eb1bebd..5e35fe1 100644 --- a/dashboard/src/components/features/commands/CommandsContent.tsx +++ b/dashboard/src/components/features/commands/CommandsContent.tsx @@ -97,4 +97,4 @@ const CommandComponent = ({ name, help }: CommandResponse) => {
) -} \ No newline at end of file +} diff --git a/dashboard/src/components/features/custommdxcomponent/CustomCodeBlock.tsx b/dashboard/src/components/features/custommdxcomponent/CustomCodeBlock.tsx index 065a030..3a035da 100644 --- a/dashboard/src/components/features/custommdxcomponent/CustomCodeBlock.tsx +++ b/dashboard/src/components/features/custommdxcomponent/CustomCodeBlock.tsx @@ -49,4 +49,3 @@ const CustomCodeBlock = ({ children, ...props }: { children: React.ReactNode, pr }; export default CustomCodeBlock; - diff --git a/dashboard/src/components/features/custommdxcomponent/CustomHeading.tsx b/dashboard/src/components/features/custommdxcomponent/CustomHeading.tsx index 82e3f66..a107d57 100644 --- a/dashboard/src/components/features/custommdxcomponent/CustomHeading.tsx +++ b/dashboard/src/components/features/custommdxcomponent/CustomHeading.tsx @@ -59,4 +59,4 @@ const CustomHeading = ({ id, children, as }: { id: string, children: React.React ); }; -export default CustomHeading; \ No newline at end of file +export default CustomHeading; diff --git a/dashboard/src/components/features/documentation/APIDocumentation.tsx b/dashboard/src/components/features/documentation/APIDocumentation.tsx index a5bdf76..6d7e34c 100644 --- a/dashboard/src/components/features/documentation/APIDocumentation.tsx +++ b/dashboard/src/components/features/documentation/APIDocumentation.tsx @@ -306,4 +306,4 @@ export const PublishDocumentationDialog = ({ open, setOpen, project_branch, endP ) } -export default APIDocumentationOfSiteApp; \ No newline at end of file +export default APIDocumentationOfSiteApp; diff --git a/dashboard/src/components/features/documentation/DocsMainPage.tsx b/dashboard/src/components/features/documentation/DocsMainPage.tsx index b002444..01f4231 100644 --- a/dashboard/src/components/features/documentation/DocsMainPage.tsx +++ b/dashboard/src/components/features/documentation/DocsMainPage.tsx @@ -149,4 +149,4 @@ const MainPageSkeleton = () => { ); -} \ No newline at end of file +} diff --git a/dashboard/src/components/features/meta_apps/YourAppAPIExplorer.tsx b/dashboard/src/components/features/meta_apps/YourAppAPIExplorer.tsx index 032b357..b47a2f0 100644 --- a/dashboard/src/components/features/meta_apps/YourAppAPIExplorer.tsx +++ b/dashboard/src/components/features/meta_apps/YourAppAPIExplorer.tsx @@ -124,4 +124,4 @@ export const ViewAPIExplorerCard = ({ app }: ViewAPIExplorerProps) => { ) -} \ No newline at end of file +} diff --git a/dashboard/src/components/features/meta_apps/YourApps.tsx b/dashboard/src/components/features/meta_apps/YourApps.tsx index d98a94c..d5e120b 100644 --- a/dashboard/src/components/features/meta_apps/YourApps.tsx +++ b/dashboard/src/components/features/meta_apps/YourApps.tsx @@ -29,15 +29,15 @@ const YourApps = () => { if (data && data.message) { return ( -
-
+
+
-
Projects
+
Site Installed Apps
{data.message.map((org: AppsData) => { @@ -78,4 +78,4 @@ const AppsCard = ({ app }: { app: AppsData }) => { ); }; -export default YourApps \ No newline at end of file +export default YourApps diff --git a/dashboard/src/components/features/meta_apps/useGetCommitDocsDetails.ts b/dashboard/src/components/features/meta_apps/useGetCommitDocsDetails.ts index a71b5e1..ea5ed4e 100644 --- a/dashboard/src/components/features/meta_apps/useGetCommitDocsDetails.ts +++ b/dashboard/src/components/features/meta_apps/useGetCommitDocsDetails.ts @@ -68,4 +68,4 @@ export const useGetCommitDocsList = () => { const data: CommitDocs[] = bootCommitDocsList || apiCommitDocsList?.message; return { data, error, isLoading, mutate }; -}; \ No newline at end of file +}; diff --git a/dashboard/src/components/features/meta_apps/useGetInstalledApp.ts b/dashboard/src/components/features/meta_apps/useGetInstalledApp.ts index b3a7fc6..ef443c1 100644 --- a/dashboard/src/components/features/meta_apps/useGetInstalledApp.ts +++ b/dashboard/src/components/features/meta_apps/useGetInstalledApp.ts @@ -40,4 +40,4 @@ export const useInstalledApps = () => { error, isLoading: isLoading && !bootInstalledApps }; -}; \ No newline at end of file +}; diff --git a/dashboard/src/components/features/projects/APIExplorer.tsx b/dashboard/src/components/features/projects/APIExplorer.tsx index 2d1ea69..cb96e68 100644 --- a/dashboard/src/components/features/projects/APIExplorer.tsx +++ b/dashboard/src/components/features/projects/APIExplorer.tsx @@ -38,7 +38,7 @@ export const APIExplorer = () => {
- Effortlessly explore and interact with your whitelisted API's and Bench commands using our API Explorer. + Effortlessly explore and interact with your whitelisted API's and Bench commands using our API Explorer.
@@ -139,4 +139,3 @@ export const ViewAPIExplorerCard = ({ project }: ViewERDProjectCardProps) => {
) } - diff --git a/dashboard/src/components/features/projects/Branch/CreateBranchModal.tsx b/dashboard/src/components/features/projects/Branch/CreateBranchModal.tsx index c6717a4..f69a6c8 100644 --- a/dashboard/src/components/features/projects/Branch/CreateBranchModal.tsx +++ b/dashboard/src/components/features/projects/Branch/CreateBranchModal.tsx @@ -147,4 +147,3 @@ const CreateBranchModal = ({ mutate, setOpen, open }: BranchProps) => { } export default CreateBranchModal - diff --git a/dashboard/src/components/features/projects/Branch/ManageBranchModal.tsx b/dashboard/src/components/features/projects/Branch/ManageBranchModal.tsx index 133acd2..3639e3e 100644 --- a/dashboard/src/components/features/projects/Branch/ManageBranchModal.tsx +++ b/dashboard/src/components/features/projects/Branch/ManageBranchModal.tsx @@ -37,4 +37,4 @@ const ManageBranchModal = ({ branches, mutate, setOpenManageModal }: ManageBranc } -export default ManageBranchModal \ No newline at end of file +export default ManageBranchModal diff --git a/dashboard/src/components/features/projects/Org/CreateOrgModal.tsx b/dashboard/src/components/features/projects/Org/CreateOrgModal.tsx index 1c58a14..3c1d77f 100644 --- a/dashboard/src/components/features/projects/Org/CreateOrgModal.tsx +++ b/dashboard/src/components/features/projects/Org/CreateOrgModal.tsx @@ -97,4 +97,4 @@ const CreateOrgModal = ({ mutate, onClose, open }: CreateOrgModalProps) => { ) } -export default CreateOrgModal \ No newline at end of file +export default CreateOrgModal diff --git a/dashboard/src/components/features/projects/Org/DeleteOrgModal.tsx b/dashboard/src/components/features/projects/Org/DeleteOrgModal.tsx index 2e07641..d59bbb4 100644 --- a/dashboard/src/components/features/projects/Org/DeleteOrgModal.tsx +++ b/dashboard/src/components/features/projects/Org/DeleteOrgModal.tsx @@ -45,4 +45,4 @@ const DeleteOrgModal = ({ org, mutate }: DeleteOrgModalProps) => { ) } -export default DeleteOrgModal \ No newline at end of file +export default DeleteOrgModal diff --git a/dashboard/src/components/features/projects/Org/OrgComponent.tsx b/dashboard/src/components/features/projects/Org/OrgComponent.tsx index 8e8788f..1e1750a 100644 --- a/dashboard/src/components/features/projects/Org/OrgComponent.tsx +++ b/dashboard/src/components/features/projects/Org/OrgComponent.tsx @@ -44,4 +44,4 @@ export const OrgComponent = ({ org, mutate }: OrgComponentProps) => {
) -} \ No newline at end of file +} diff --git a/dashboard/src/components/features/projects/Projects.tsx b/dashboard/src/components/features/projects/Projects.tsx index 5345589..f910a59 100644 --- a/dashboard/src/components/features/projects/Projects.tsx +++ b/dashboard/src/components/features/projects/Projects.tsx @@ -48,8 +48,8 @@ const Projects = () => { if (data && data.message) { return ( -
-
+
+
@@ -80,4 +80,4 @@ const Projects = () => { } }; -export default Projects; \ No newline at end of file +export default Projects; diff --git a/dashboard/src/components/features/projects/Projects/DeleteProjectModal.tsx b/dashboard/src/components/features/projects/Projects/DeleteProjectModal.tsx index 4f63f38..1102ad7 100644 --- a/dashboard/src/components/features/projects/Projects/DeleteProjectModal.tsx +++ b/dashboard/src/components/features/projects/Projects/DeleteProjectModal.tsx @@ -45,4 +45,4 @@ const DeleteProjectModal = ({ project, mutate }: DeleteProjectModalProps) => { ) } -export default DeleteProjectModal \ No newline at end of file +export default DeleteProjectModal diff --git a/dashboard/src/components/features/projects/ViewERDAppDialog.tsx b/dashboard/src/components/features/projects/ViewERDAppDialog.tsx index ae31f4c..c786fcd 100644 --- a/dashboard/src/components/features/projects/ViewERDAppDialog.tsx +++ b/dashboard/src/components/features/projects/ViewERDAppDialog.tsx @@ -94,4 +94,3 @@ export const ViewERDProjectCard = ({ project, apps, setApps }: ViewERDProjectCar
) } - diff --git a/dashboard/src/components/features/projects/ViewERDButton.tsx b/dashboard/src/components/features/projects/ViewERDButton.tsx index 53a58f3..8334882 100644 --- a/dashboard/src/components/features/projects/ViewERDButton.tsx +++ b/dashboard/src/components/features/projects/ViewERDButton.tsx @@ -74,4 +74,4 @@ export const ViewERDButtonForSiteApps = () => {
); -} \ No newline at end of file +} diff --git a/dashboard/src/components/ui/sonner.tsx b/dashboard/src/components/ui/sonner.tsx new file mode 100644 index 0000000..1128edf --- /dev/null +++ b/dashboard/src/components/ui/sonner.tsx @@ -0,0 +1,29 @@ +import { useTheme } from "next-themes" +import { Toaster as Sonner } from "sonner" + +type ToasterProps = React.ComponentProps + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/dashboard/src/components/utils/dateconversion.ts b/dashboard/src/components/utils/dateconversion.ts index 9bbb12d..82ae5d2 100644 --- a/dashboard/src/components/utils/dateconversion.ts +++ b/dashboard/src/components/utils/dateconversion.ts @@ -5,7 +5,7 @@ import { Moment } from "moment-timezone" * Converts a Frappe timestamp to a readable time ago string * @param timestamp A frappe timestamp string in the format YYYY-MM-DD HH:mm:ss * @param withoutSuffix remove the suffix from the time ago string - * @returns + * @returns */ export const convertFrappeTimestampToTimeAgo = (timestamp?: string, withoutSuffix?: boolean) => { @@ -28,4 +28,4 @@ export const convertFrappeTimestampToUserTimezone = (timestamp: string): Moment } else { return moment(timestamp) } -} \ No newline at end of file +} diff --git a/dashboard/src/config/socket.ts b/dashboard/src/config/socket.ts index ec0b589..226a66f 100644 --- a/dashboard/src/config/socket.ts +++ b/dashboard/src/config/socket.ts @@ -2,4 +2,4 @@ const host = window.location.hostname; const web_port = window.location.port ? `:${window.location.port}` : ''; const protocol = web_port ? 'http' : 'https'; -export const web_url = `${protocol}://${host}${web_port}`; \ No newline at end of file +export const web_url = `${protocol}://${host}${web_port}`; diff --git a/dashboard/src/hooks/useDebounce.ts b/dashboard/src/hooks/useDebounce.ts index a26a73c..cb626ec 100644 --- a/dashboard/src/hooks/useDebounce.ts +++ b/dashboard/src/hooks/useDebounce.ts @@ -21,4 +21,4 @@ export const useDebounce = (value: T, delay = 200): T => { }, [value, delay]); return debouncedValue; -} \ No newline at end of file +} diff --git a/dashboard/src/hooks/useGetDoctypeMeta.ts b/dashboard/src/hooks/useGetDoctypeMeta.ts index 73598ed..115fd24 100644 --- a/dashboard/src/hooks/useGetDoctypeMeta.ts +++ b/dashboard/src/hooks/useGetDoctypeMeta.ts @@ -91,10 +91,10 @@ export const useDoctypeForField = () => { return hasField } /** - * - * @param doctype + * + * @param doctype * @param fieldname - * return promise that resolves to the doctype of the field + * return promise that resolves to the doctype of the field */ const getDoctypeForField = (doctype: string, fieldname: string) => { /** @@ -146,4 +146,4 @@ export const useDoctypeForField = () => { } return getDoctypeForField -} \ No newline at end of file +} diff --git a/dashboard/src/index.css b/dashboard/src/index.css index 51e370a..2188df2 100644 --- a/dashboard/src/index.css +++ b/dashboard/src/index.css @@ -3,73 +3,73 @@ @tailwind base; @tailwind components; @tailwind utilities; - + @layer base { :root { --background: 0 0% 100%; --foreground: 222.2 84% 4.9%; - + --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; - + --popover: 0 0% 100%; --popover-foreground: 222.2 84% 4.9%; - + --card: 0 0% 100%; --card-foreground: 222.2 84% 4.9%; - + --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; - + --primary: 222.2 47.4% 11.2%; --primary-foreground: 210 40% 98%; - + --secondary: 210 40% 96.1%; --secondary-foreground: 222.2 47.4% 11.2%; - + --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; - + --destructive: 0 84.2% 60.2%; --destructive-foreground: 210 40% 98%; - + --ring: 215 20.2% 65.1%; - + --radius: 0.5rem; } - + .dark { --background: 222.2 84% 4.9%; --foreground: 210 40% 98%; - + --muted: 217.2 32.6% 17.5%; --muted-foreground: 215 20.2% 65.1%; - + --popover: 222.2 84% 4.9%; --popover-foreground: 210 40% 98%; - + --card: 222.2 84% 4.9%; --card-foreground: 210 40% 98%; - + --border: 217.2 32.6% 17.5%; --input: 217.2 32.6% 17.5%; - + --primary: 210 40% 98%; --primary-foreground: 222.2 47.4% 11.2%; - + --secondary: 217.2 32.6% 17.5%; --secondary-foreground: 210 40% 98%; - + --accent: 217.2 32.6% 17.5%; --accent-foreground: 210 40% 98%; - + --destructive: 0 62.8% 30.6%; --destructive-foreground: 0 85.7% 97.3%; - + --ring: 217.2 32.6% 17.5%; } } - + @layer base { * { @apply border-border; @@ -77,4 +77,4 @@ body { @apply bg-background text-foreground; } -} \ No newline at end of file +} diff --git a/dashboard/src/lib/utils.ts b/dashboard/src/lib/utils.ts index 153dac8..453f6fb 100644 --- a/dashboard/src/lib/utils.ts +++ b/dashboard/src/lib/utils.ts @@ -25,7 +25,7 @@ export const convertFrappeTimestampToReadableDate = (timestamp?: string, format * Converts a Frappe date to a readable time ago string * @param date A frappe date string in the format YYYY-MM-DD * @param withoutSuffix remove the suffix from the time ago string - * @returns + * @returns */ export const convertFrappeDateStringToTimeAgo = (date?: string, withoutSuffix?: boolean) => { if (date) { diff --git a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldActionButton.tsx b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldActionButton.tsx index 208c7e3..53f82df 100644 --- a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldActionButton.tsx +++ b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldActionButton.tsx @@ -31,4 +31,4 @@ export const FieldActionButton = ({ field }: { field: DocField }) => { ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldModal.tsx b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldModal.tsx index 8f334b0..970d96b 100644 --- a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldModal.tsx +++ b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldModal.tsx @@ -191,4 +191,4 @@ export const FieldActionModal = ({ field, open, onClose }: { field: DocField, op ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeFilters.tsx b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeFilters.tsx index 03e1028..fe7be02 100644 --- a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeFilters.tsx +++ b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeFilters.tsx @@ -140,4 +140,4 @@ export function DataTableFacetedFilter({ ) } -export default DataTableFacetedFilter \ No newline at end of file +export default DataTableFacetedFilter diff --git a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeOptions.ts b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeOptions.ts index 74730e1..3ad4f80 100644 --- a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeOptions.ts +++ b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldTypeOptions.ts @@ -160,4 +160,4 @@ export const FieldTypeOptions: FieldTypeOptionsType[] = [ value: 'Time', icon: ICON_KEY_MAP['Time'] }, -] \ No newline at end of file +] diff --git a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldsTable.tsx b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldsTable.tsx index 58af418..29748e7 100644 --- a/dashboard/src/pages/features/TableDrawer/FieldTable/FieldsTable.tsx +++ b/dashboard/src/pages/features/TableDrawer/FieldTable/FieldsTable.tsx @@ -272,4 +272,4 @@ export const CopyHovor = ({ value }: { value: string }) => {
) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/TableDrawer/FieldTable/IconTextComponent.tsx b/dashboard/src/pages/features/TableDrawer/FieldTable/IconTextComponent.tsx index ac2c89c..71a140f 100644 --- a/dashboard/src/pages/features/TableDrawer/FieldTable/IconTextComponent.tsx +++ b/dashboard/src/pages/features/TableDrawer/FieldTable/IconTextComponent.tsx @@ -42,4 +42,4 @@ export const EmailLinkPhoneIcon = ({ options }: { options: string }) => { }} className='text-xs'>Link } return null -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/TableDrawer/LinkTable/LinkTable.tsx b/dashboard/src/pages/features/TableDrawer/LinkTable/LinkTable.tsx index 7e9eda4..22b11a8 100644 --- a/dashboard/src/pages/features/TableDrawer/LinkTable/LinkTable.tsx +++ b/dashboard/src/pages/features/TableDrawer/LinkTable/LinkTable.tsx @@ -147,4 +147,4 @@ export const LinkTable = ({ links }: { links: DocTypeLink[] }) => {
) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/TableDrawer/MetaTableDrawer.tsx b/dashboard/src/pages/features/TableDrawer/MetaTableDrawer.tsx index 4672cb7..898ea87 100644 --- a/dashboard/src/pages/features/TableDrawer/MetaTableDrawer.tsx +++ b/dashboard/src/pages/features/TableDrawer/MetaTableDrawer.tsx @@ -116,4 +116,4 @@ export const MetaTableDrawer = ({ doctype, isOpen, onClose }: Props) => { ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/TableDrawer/PermissionsTable/PermissionsTable.tsx b/dashboard/src/pages/features/TableDrawer/PermissionsTable/PermissionsTable.tsx index 3a4cb48..09d34bb 100644 --- a/dashboard/src/pages/features/TableDrawer/PermissionsTable/PermissionsTable.tsx +++ b/dashboard/src/pages/features/TableDrawer/PermissionsTable/PermissionsTable.tsx @@ -209,4 +209,4 @@ export const PermissionsTable = ({ permissions }: { permissions: DocPerm[] }) =>
) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/TableDrawer/TableDrawer.tsx b/dashboard/src/pages/features/TableDrawer/TableDrawer.tsx index 4226de5..67525a2 100644 --- a/dashboard/src/pages/features/TableDrawer/TableDrawer.tsx +++ b/dashboard/src/pages/features/TableDrawer/TableDrawer.tsx @@ -120,4 +120,4 @@ export const TableDrawer = ({ doctype, isOpen, onClose, project_branch }: Props) ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/api_viewer/APIViewer.tsx b/dashboard/src/pages/features/api_viewer/APIViewer.tsx index c3cb37b..553ecf4 100644 --- a/dashboard/src/pages/features/api_viewer/APIViewer.tsx +++ b/dashboard/src/pages/features/api_viewer/APIViewer.tsx @@ -94,6 +94,8 @@ export const APIViewer = ({ projectBranch }: { projectBranch: string }) => { selectedEndpoint={selectedendpoint} path_to_folder={data?.message.path_to_folder} listRef={listRef} + viewerType="project" + project_branch={projectBranch} />
@@ -120,4 +122,4 @@ export const APIViewer = ({ projectBranch }: { projectBranch: string }) => { ) } -export default APIViewerContainer \ No newline at end of file +export default APIViewerContainer diff --git a/dashboard/src/pages/features/api_viewer/AppAPIViewer.tsx b/dashboard/src/pages/features/api_viewer/AppAPIViewer.tsx index 88e3ac4..5fa2d66 100644 --- a/dashboard/src/pages/features/api_viewer/AppAPIViewer.tsx +++ b/dashboard/src/pages/features/api_viewer/AppAPIViewer.tsx @@ -82,6 +82,7 @@ export const AppAPIViewer = ({ appName }: { appName: string }) => { selectedEndpoint={selectedendpoint} path_to_folder="" listRef={listRef} + viewerType="app" /> @@ -103,4 +104,4 @@ export const AppAPIViewer = ({ appName }: { appName: string }) => { ) } -export default AppAPIViewerContainer \ No newline at end of file +export default AppAPIViewerContainer diff --git a/dashboard/src/pages/features/docs/CommitDocs/CreateCommitDocModal.tsx b/dashboard/src/pages/features/docs/CommitDocs/CreateCommitDocModal.tsx index 5f9bb3e..214d710 100644 --- a/dashboard/src/pages/features/docs/CommitDocs/CreateCommitDocModal.tsx +++ b/dashboard/src/pages/features/docs/CommitDocs/CreateCommitDocModal.tsx @@ -155,7 +155,7 @@ const CreateCommitDocs = ({ onClose, open ,mutate}: CreateCommitDocsProps) => { Clear
- + ) : ( )} - + {/* Task Card */} ); -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/docs/LandingPage/DocsCard.tsx b/dashboard/src/pages/features/docs/LandingPage/DocsCard.tsx index 4b29565..4f554cc 100644 --- a/dashboard/src/pages/features/docs/LandingPage/DocsCard.tsx +++ b/dashboard/src/pages/features/docs/LandingPage/DocsCard.tsx @@ -21,7 +21,7 @@ const DocsListCard = ({ data }: { data: CommitDocs }) => { const onNavigate = useCallback(() => { navigate({ - pathname: `/docs/${data.name}` + pathname: `/docs/${data.route}` }) }, [navigate]) diff --git a/dashboard/src/pages/features/docs/Navbar/DashboardNavbar.tsx b/dashboard/src/pages/features/docs/Navbar/DashboardNavbar.tsx index 6450eb0..f9b4c04 100644 --- a/dashboard/src/pages/features/docs/Navbar/DashboardNavbar.tsx +++ b/dashboard/src/pages/features/docs/Navbar/DashboardNavbar.tsx @@ -26,7 +26,7 @@ const NavbarDetails = ({ ID }: { ID: string }) => { ...data.navbar_items[key], })); }, [data]); - + const initialTasks: NavbarTask[] = useMemo(() => { if (!data) return []; return Object.entries(data.navbar_items) @@ -49,4 +49,4 @@ const NavbarDetails = ({ ID }: { ID: string }) => { if (isLoading) return ; return null; -}; \ No newline at end of file +}; diff --git a/dashboard/src/pages/features/docs/Navbar/NavbarBoard.tsx b/dashboard/src/pages/features/docs/Navbar/NavbarBoard.tsx index 26bcf51..295fbac 100644 --- a/dashboard/src/pages/features/docs/Navbar/NavbarBoard.tsx +++ b/dashboard/src/pages/features/docs/Navbar/NavbarBoard.tsx @@ -358,7 +358,7 @@ const CreateNewParentLabel = ({ onColumnCreate, onClose, open }: CreateParentLab if (!prev) { // Initialize the column object if it's null return { - id: '', // Provide a default value for required fields + id: crypto.randomUUID(), // Generate a unique ID type: 'Button', // Default type label: '', url: '', @@ -467,4 +467,4 @@ const CreateNewParentLabel = ({ onColumnCreate, onClose, open }: CreateParentLab ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/docs/Navbar/NavbarColumn.tsx b/dashboard/src/pages/features/docs/Navbar/NavbarColumn.tsx index e5e455e..979bb85 100644 --- a/dashboard/src/pages/features/docs/Navbar/NavbarColumn.tsx +++ b/dashboard/src/pages/features/docs/Navbar/NavbarColumn.tsx @@ -348,4 +348,4 @@ export function NavbarColumn({ ); -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/docs/Navbar/NavbarTaskCard.tsx b/dashboard/src/pages/features/docs/Navbar/NavbarTaskCard.tsx index 7841f9f..19f18f3 100644 --- a/dashboard/src/pages/features/docs/Navbar/NavbarTaskCard.tsx +++ b/dashboard/src/pages/features/docs/Navbar/NavbarTaskCard.tsx @@ -144,4 +144,4 @@ export function NavbarTaskCard({ task, onDelete, handleUpdateTask }: { task: Nav ); -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/docs/PageContent.tsx b/dashboard/src/pages/features/docs/PageContent.tsx index 06e6415..499a730 100644 --- a/dashboard/src/pages/features/docs/PageContent.tsx +++ b/dashboard/src/pages/features/docs/PageContent.tsx @@ -48,4 +48,4 @@ const PageContent = ({ pageID, ID }: { pageID: string, ID: string }) => { return null } -export default PageContent \ No newline at end of file +export default PageContent diff --git a/dashboard/src/pages/features/docs/Settings/DocsSettings.tsx b/dashboard/src/pages/features/docs/Settings/DocsSettings.tsx index 31a3f42..6536042 100644 --- a/dashboard/src/pages/features/docs/Settings/DocsSettings.tsx +++ b/dashboard/src/pages/features/docs/Settings/DocsSettings.tsx @@ -172,4 +172,4 @@ const SettingsForm = ({ data, mutate }: { ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/docs/Sidebar/DashboardSidebar.tsx b/dashboard/src/pages/features/docs/Sidebar/DashboardSidebar.tsx index 80d7d5c..fd128b8 100644 --- a/dashboard/src/pages/features/docs/Sidebar/DashboardSidebar.tsx +++ b/dashboard/src/pages/features/docs/Sidebar/DashboardSidebar.tsx @@ -52,4 +52,4 @@ const SidebarDetails = ({ ID }: { ID: string }) => { if (isLoading) return ; return null; -}; \ No newline at end of file +}; diff --git a/dashboard/src/pages/features/erd/ERDForDoctypes.tsx b/dashboard/src/pages/features/erd/ERDForDoctypes.tsx index 558e351..b05068a 100644 --- a/dashboard/src/pages/features/erd/ERDForDoctypes.tsx +++ b/dashboard/src/pages/features/erd/ERDForDoctypes.tsx @@ -45,4 +45,4 @@ export const ERDForDoctypes = ({ project_branch, doctypes, setDocTypes, flowRef } return null -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/erd/ERDViewer.tsx b/dashboard/src/pages/features/erd/ERDViewer.tsx index ab6c0c2..d6b48cc 100644 --- a/dashboard/src/pages/features/erd/ERDViewer.tsx +++ b/dashboard/src/pages/features/erd/ERDViewer.tsx @@ -172,14 +172,14 @@ export const ModuleDoctypeListDrawer = ({ open, setOpen, apps, setSelectedApps, -
+
- -
- + +
+ @@ -289,4 +289,4 @@ export const ModuleList = ({ apps, doctype, setDocType }: { apps: string[], doct } -export default ERDViewer \ No newline at end of file +export default ERDViewer diff --git a/dashboard/src/pages/features/erd/Graph.tsx b/dashboard/src/pages/features/erd/Graph.tsx index fc06144..1e7ef91 100644 --- a/dashboard/src/pages/features/erd/Graph.tsx +++ b/dashboard/src/pages/features/erd/Graph.tsx @@ -374,4 +374,4 @@ const TablesGraph: FC<{ ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/erd/TableHoverCard.tsx b/dashboard/src/pages/features/erd/TableHoverCard.tsx index e00d68d..0e22530 100644 --- a/dashboard/src/pages/features/erd/TableHoverCard.tsx +++ b/dashboard/src/pages/features/erd/TableHoverCard.tsx @@ -23,4 +23,4 @@ export const TableHoverCard = ({ column }: { column: PostgresColumn }) => { ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/erd/meta/CreateERDForMeta.tsx b/dashboard/src/pages/features/erd/meta/CreateERDForMeta.tsx index 1b25f9c..e0873ba 100644 --- a/dashboard/src/pages/features/erd/meta/CreateERDForMeta.tsx +++ b/dashboard/src/pages/features/erd/meta/CreateERDForMeta.tsx @@ -110,7 +110,7 @@ export const ModuleDoctypeListDrawer = ({ open, setOpen, erdDoctypes, setERDDocT leaveTo="translate-x-[-100%]" > -
+
@@ -138,13 +138,12 @@ export const ModuleDoctypeListDrawer = ({ open, setOpen, erdDoctypes, setERDDocT
-
+
- -
-
- +
+ +
@@ -222,4 +221,4 @@ export const ModuleList = ({ doctype, setDocType }: { doctype: string[], setDocT } -export default CreateERD \ No newline at end of file +export default CreateERD diff --git a/dashboard/src/pages/features/erd/meta/ERDDoctypeAndAppModal.tsx b/dashboard/src/pages/features/erd/meta/ERDDoctypeAndAppModal.tsx index 1c0240c..755309c 100644 --- a/dashboard/src/pages/features/erd/meta/ERDDoctypeAndAppModal.tsx +++ b/dashboard/src/pages/features/erd/meta/ERDDoctypeAndAppModal.tsx @@ -101,4 +101,4 @@ export const ViewERDAppList = ({ apps, setApps, onClose }: { apps: string[], set ) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/erd/meta/ERDForMetaDoctype.tsx b/dashboard/src/pages/features/erd/meta/ERDForMetaDoctype.tsx index b604dd0..f9ea522 100644 --- a/dashboard/src/pages/features/erd/meta/ERDForMetaDoctype.tsx +++ b/dashboard/src/pages/features/erd/meta/ERDForMetaDoctype.tsx @@ -43,4 +43,4 @@ export const ERDForMetaDoctypes = ({ doctypes, setDocTypes, flowRef }: Props) => } return null -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/erd/meta/MetaGraph.tsx b/dashboard/src/pages/features/erd/meta/MetaGraph.tsx index d6a081f..b7f8cd4 100644 --- a/dashboard/src/pages/features/erd/meta/MetaGraph.tsx +++ b/dashboard/src/pages/features/erd/meta/MetaGraph.tsx @@ -366,4 +366,4 @@ const TablesGraph: FC<{
) -} \ No newline at end of file +} diff --git a/dashboard/src/pages/features/erd/tables.ts b/dashboard/src/pages/features/erd/tables.ts index 1f757e8..9d04c91 100644 --- a/dashboard/src/pages/features/erd/tables.ts +++ b/dashboard/src/pages/features/erd/tables.ts @@ -760,4 +760,4 @@ export const relationships: PostgresRelationship[] = [ "target_column_name": "name" } ] -export default tables; \ No newline at end of file +export default tables; diff --git a/dashboard/src/pages/overview/Overview.tsx b/dashboard/src/pages/overview/Overview.tsx index 445aa08..b485e6e 100644 --- a/dashboard/src/pages/overview/Overview.tsx +++ b/dashboard/src/pages/overview/Overview.tsx @@ -14,25 +14,25 @@ const Overview = () => { // if both arer false then count 1 if any one is true then count 2 if both are true then count 3 const gridCount = areAppsAvailable + isCreateAccess + 1 return ( -
+
- - + + Projects {areAppsAvailable && Site Apps} {isCreateAccess && Docs} - + }> - {areAppsAvailable && + {areAppsAvailable && }> } - {isCreateAccess && + {isCreateAccess && }> @@ -41,4 +41,4 @@ const Overview = () => {
) } -export default Overview \ No newline at end of file +export default Overview diff --git a/dashboard/src/types/APIData.ts b/dashboard/src/types/APIData.ts index 2db8f75..5ca9831 100644 --- a/dashboard/src/types/APIData.ts +++ b/dashboard/src/types/APIData.ts @@ -25,4 +25,4 @@ export interface Argument { argument: string type: string default: string -} \ No newline at end of file +} diff --git a/dashboard/src/types/CommitProjectBranch.ts b/dashboard/src/types/CommitProjectBranch.ts index 2deb7e4..997e286 100644 --- a/dashboard/src/types/CommitProjectBranch.ts +++ b/dashboard/src/types/CommitProjectBranch.ts @@ -22,4 +22,4 @@ export interface ModuleDataValue { } export interface AppModuleData { [key: string]: ModuleData -} \ No newline at end of file +} diff --git a/dashboard/src/types/Core/DocField.ts b/dashboard/src/types/Core/DocField.ts index e185624..fd1ec02 100644 --- a/dashboard/src/types/Core/DocField.ts +++ b/dashboard/src/types/Core/DocField.ts @@ -115,4 +115,4 @@ For Select, enter list of Options, each on a new line. */ oldfieldname?: string /** : Data */ oldfieldtype?: string -} \ No newline at end of file +} diff --git a/dashboard/src/types/Core/DocPerm.ts b/dashboard/src/types/Core/DocPerm.ts index 0ec6e9c..a2bb531 100644 --- a/dashboard/src/types/Core/DocPerm.ts +++ b/dashboard/src/types/Core/DocPerm.ts @@ -44,4 +44,4 @@ export interface DocPerm{ print?: 0 | 1 /** Email : Check */ email?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/Core/DocType.ts b/dashboard/src/types/Core/DocType.ts index b9abcd9..349c015 100644 --- a/dashboard/src/types/Core/DocType.ts +++ b/dashboard/src/types/Core/DocType.ts @@ -147,4 +147,4 @@ export interface DocType { migration_hash?: string /** Fields : Table - DocField */ fields?: DocField[] -} \ No newline at end of file +} diff --git a/dashboard/src/types/Core/DocTypeAction.ts b/dashboard/src/types/Core/DocTypeAction.ts index 9dea315..bd862f7 100644 --- a/dashboard/src/types/Core/DocTypeAction.ts +++ b/dashboard/src/types/Core/DocTypeAction.ts @@ -22,4 +22,4 @@ export interface DocTypeAction{ hidden?: 0 | 1 /** Custom : Check */ custom?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/Core/DocTypeLink.ts b/dashboard/src/types/Core/DocTypeLink.ts index 2b9fc8c..096f24e 100644 --- a/dashboard/src/types/Core/DocTypeLink.ts +++ b/dashboard/src/types/Core/DocTypeLink.ts @@ -26,4 +26,4 @@ export interface DocTypeLink{ is_child_table?: 0 | 1 /** Custom : Check */ custom?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/Core/DocTypeState.ts b/dashboard/src/types/Core/DocTypeState.ts index 575a9c9..a3c3e25 100644 --- a/dashboard/src/types/Core/DocTypeState.ts +++ b/dashboard/src/types/Core/DocTypeState.ts @@ -16,4 +16,4 @@ export interface DocTypeState{ color: "Blue" | "Cyan" | "Gray" | "Green" | "Light Blue" | "Orange" | "Pink" | "Purple" | "Red" | "Yellow" /** Custom : Check */ custom?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/Core/File.ts b/dashboard/src/types/Core/File.ts index 11ff26d..2b87a6c 100644 --- a/dashboard/src/types/Core/File.ts +++ b/dashboard/src/types/Core/File.ts @@ -46,4 +46,4 @@ export interface File{ uploaded_to_dropbox?: 0 | 1 /** Uploaded To Google Drive : Check */ uploaded_to_google_drive?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/Integrations/OAuthScope.ts b/dashboard/src/types/Integrations/OAuthScope.ts index 1b1c48f..a95b5cc 100644 --- a/dashboard/src/types/Integrations/OAuthScope.ts +++ b/dashboard/src/types/Integrations/OAuthScope.ts @@ -12,4 +12,4 @@ export interface OAuthScope{ idx?: number /** Scope : Data */ scope?: string -} \ No newline at end of file +} diff --git a/dashboard/src/types/Table.ts b/dashboard/src/types/Table.ts index 83844c7..9f8d6a9 100644 --- a/dashboard/src/types/Table.ts +++ b/dashboard/src/types/Table.ts @@ -44,4 +44,4 @@ export type PostgresRelationship = { source_column_name: string, target_table_name: string, target_column_name: string, -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitBranchDocumentation.ts b/dashboard/src/types/commit/CommitBranchDocumentation.ts index 97ec464..f2ef1a8 100644 --- a/dashboard/src/types/commit/CommitBranchDocumentation.ts +++ b/dashboard/src/types/commit/CommitBranchDocumentation.ts @@ -14,4 +14,4 @@ export interface CommitBranchDocumentation{ app: string /** Documentation : JSON */ documentation?: any -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitDocs.ts b/dashboard/src/types/commit/CommitDocs.ts index b3775a0..408f0e3 100644 --- a/dashboard/src/types/commit/CommitDocs.ts +++ b/dashboard/src/types/commit/CommitDocs.ts @@ -51,4 +51,4 @@ export interface CommitDocs{ discord?: string /** Footer : Table - Commit Docs Footer Item */ footer?: CommitDocsFooterItem[] -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitDocsFooterItem.ts b/dashboard/src/types/commit/CommitDocsFooterItem.ts index f047f56..4d9ad28 100644 --- a/dashboard/src/types/commit/CommitDocsFooterItem.ts +++ b/dashboard/src/types/commit/CommitDocsFooterItem.ts @@ -18,4 +18,4 @@ export interface CommitDocsFooterItem{ url: string /** Hide on Footer : Check */ hide_on_footer?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitDocsGroupItem.ts b/dashboard/src/types/commit/CommitDocsGroupItem.ts index 757f0a3..84f95f0 100644 --- a/dashboard/src/types/commit/CommitDocsGroupItem.ts +++ b/dashboard/src/types/commit/CommitDocsGroupItem.ts @@ -16,4 +16,4 @@ export interface CommitDocsGroupItem{ docs_page: string /** Hide on Sidebar : Check */ hide_on_sidebar?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitDocsPage.ts b/dashboard/src/types/commit/CommitDocsPage.ts index 4891dbf..1ecdfcf 100644 --- a/dashboard/src/types/commit/CommitDocsPage.ts +++ b/dashboard/src/types/commit/CommitDocsPage.ts @@ -30,8 +30,8 @@ export interface CommitDocsPage{ badge_color?: string /** Is Group Page : Check - When enabled, this page can hold and display nested sub-pages, creating a structured hierarchy in the sidebar. */ is_group_page?: 0 | 1 - /** Content : Markdown Editor */ + /** Content : Code */ content?: string /** Linked Pages : Table - Linked Commit Docs Page */ linked_pages?: LinkedCommitDocsPage[] -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitDocsTopbarItem.ts b/dashboard/src/types/commit/CommitDocsTopbarItem.ts index edc26bf..77669a9 100644 --- a/dashboard/src/types/commit/CommitDocsTopbarItem.ts +++ b/dashboard/src/types/commit/CommitDocsTopbarItem.ts @@ -25,4 +25,4 @@ export interface CommitDocsTopbarItem{ icon?: string /** Is Primary Button : Check */ is_primary_button?: 0 | 1 -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitOrganization.ts b/dashboard/src/types/commit/CommitOrganization.ts index 15aee35..9284c32 100644 --- a/dashboard/src/types/commit/CommitOrganization.ts +++ b/dashboard/src/types/commit/CommitOrganization.ts @@ -18,4 +18,4 @@ export interface CommitOrganization{ image?: string /** About : Data */ about?: string -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitProject.ts b/dashboard/src/types/commit/CommitProject.ts index e05dd53..6605b77 100644 --- a/dashboard/src/types/commit/CommitProject.ts +++ b/dashboard/src/types/commit/CommitProject.ts @@ -26,4 +26,4 @@ export interface CommitProject{ path_to_folder?: string /** Description : Data */ description?: string -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitProjectBranch.ts b/dashboard/src/types/commit/CommitProjectBranch.ts index c03d8c0..c0d2049 100644 --- a/dashboard/src/types/commit/CommitProjectBranch.ts +++ b/dashboard/src/types/commit/CommitProjectBranch.ts @@ -34,4 +34,4 @@ export interface CommitProjectBranch{ whitelisted_apis?: any /** Documentation : JSON */ documentation?: any -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/CommitSettings.ts b/dashboard/src/types/commit/CommitSettings.ts index bb3e9da..5a4df17 100644 --- a/dashboard/src/types/commit/CommitSettings.ts +++ b/dashboard/src/types/commit/CommitSettings.ts @@ -18,4 +18,4 @@ export interface CommitSettings{ commit_docs_description?: string /** Commit Docs Header Image URL : Attach Image - Upload File URL for the image, that will visible on landing page of docs. format(SVG,PNG,JPG) */ commit_docs_header_image_url?: string -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/GithubSettings.ts b/dashboard/src/types/commit/GithubSettings.ts index 2d29783..2a8e198 100644 --- a/dashboard/src/types/commit/GithubSettings.ts +++ b/dashboard/src/types/commit/GithubSettings.ts @@ -24,4 +24,4 @@ export interface GithubSettings{ redirect_uri?: string /** Scopes : JSON */ scopes?: any -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/GithubToken.ts b/dashboard/src/types/commit/GithubToken.ts index 67bb70d..1d01384 100644 --- a/dashboard/src/types/commit/GithubToken.ts +++ b/dashboard/src/types/commit/GithubToken.ts @@ -25,4 +25,4 @@ export interface GithubToken{ refresh_token_expire_in?: number /** Scopes : Table - OAuth Scope */ scopes?: OAuthScope[] -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/LinkedCommitDocsPage.ts b/dashboard/src/types/commit/LinkedCommitDocsPage.ts index b4f1dea..cdf968b 100644 --- a/dashboard/src/types/commit/LinkedCommitDocsPage.ts +++ b/dashboard/src/types/commit/LinkedCommitDocsPage.ts @@ -12,4 +12,4 @@ export interface LinkedCommitDocsPage{ idx?: number /** Commit Docs Page : Link - Commit Docs Page */ commit_docs_page: string -} \ No newline at end of file +} diff --git a/dashboard/src/types/commit/OpenAISettings.ts b/dashboard/src/types/commit/OpenAISettings.ts index 9fd1a10..fdb10e6 100644 --- a/dashboard/src/types/commit/OpenAISettings.ts +++ b/dashboard/src/types/commit/OpenAISettings.ts @@ -16,4 +16,4 @@ export interface OpenAISettings{ api_key: string /** Project : Data */ project?: string -} \ No newline at end of file +} diff --git a/dashboard/src/utils/defaults.ts b/dashboard/src/utils/defaults.ts index 9a15148..1cdd749 100644 --- a/dashboard/src/utils/defaults.ts +++ b/dashboard/src/utils/defaults.ts @@ -14,4 +14,4 @@ export const getCommitDocsHeaderAndDescription = () => { // @ts-expect-error const commit_docs_description = window.frappe?.boot?.commit_docs_description ?? '' return { header, commit_docs_description } -} \ No newline at end of file +} diff --git a/dashboard/src/utils/removeFrappeFields.ts b/dashboard/src/utils/removeFrappeFields.ts index c947326..ed98dc3 100644 --- a/dashboard/src/utils/removeFrappeFields.ts +++ b/dashboard/src/utils/removeFrappeFields.ts @@ -21,4 +21,4 @@ export const removeFrappeFieldsWithChild = (data: FrappeDoc): Omit { } //@ts-expect-error return (window?.frappe?.boot?.show_system_apps ? true : false) -} \ No newline at end of file +} diff --git a/dashboard/tsconfig.json b/dashboard/tsconfig.json index 0499e75..9810c19 100644 --- a/dashboard/tsconfig.json +++ b/dashboard/tsconfig.json @@ -9,14 +9,12 @@ ], "module": "ESNext", "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, @@ -36,4 +34,4 @@ "path": "./tsconfig.node.json" } ] -} \ No newline at end of file +} diff --git a/dashboard/tsconfig.node.json b/dashboard/tsconfig.node.json index a645f8f..42872c5 100644 --- a/dashboard/tsconfig.node.json +++ b/dashboard/tsconfig.node.json @@ -4,7 +4,7 @@ "skipLibCheck": true, "module": "ESNext", "moduleResolution": "bundler", - "allowSyntheticDefaultImports": true, + "allowSyntheticDefaultImports": true }, "include": ["vite.config.ts"] } diff --git a/dashboard/yarn.lock b/dashboard/yarn.lock index af89245..9aa6950 100644 --- a/dashboard/yarn.lock +++ b/dashboard/yarn.lock @@ -251,7 +251,7 @@ resolved "https://registry.yarnpkg.com/@atomico/use-value-history/-/use-value-history-1.0.1.tgz#74ba40c382936f835c80435d2e67235216f32286" integrity sha512-a0mtNNQ7AXOtJF93ySqp0sw1AQg6GiAEtoThpePEH/CCU07tyW2lKsAINU4/SYxZKYhyMbqBTuziK4D7gixFXg== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -260,39 +260,39 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/compat-data@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" - integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== +"@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== "@babel/core@^7.22.1", "@babel/core@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/helper-compilation-targets" "^7.26.5" "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.26.0", "@babel/generator@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" - integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== +"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" + integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== dependencies: - "@babel/parser" "^7.26.3" - "@babel/types" "^7.26.3" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -304,28 +304,28 @@ dependencies: "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" - integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== +"@babel/helper-compilation-targets@^7.26.5": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" + integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== dependencies: - "@babel/compat-data" "^7.25.9" + "@babel/compat-data" "^7.26.8" "@babel/helper-validator-option" "^7.25.9" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" - integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== +"@babel/helper-create-class-features-plugin@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30" + integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" "@babel/helper-member-expression-to-functions" "^7.25.9" "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-replace-supers" "^7.26.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/traverse" "^7.27.0" semver "^6.3.1" "@babel/helper-member-expression-to-functions@^7.25.9": @@ -360,19 +360,19 @@ dependencies: "@babel/types" "^7.25.9" -"@babel/helper-plugin-utils@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" - integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== +"@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== -"@babel/helper-replace-supers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" - integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== +"@babel/helper-replace-supers@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" + integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== dependencies: "@babel/helper-member-expression-to-functions" "^7.25.9" "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/traverse" "^7.26.5" "@babel/helper-skip-transparent-expression-wrappers@^7.25.9": version "7.25.9" @@ -397,20 +397,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== +"@babel/helpers@^7.26.10": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" + integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.6", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" - integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.6", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" + integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== dependencies: - "@babel/types" "^7.26.3" + "@babel/types" "^7.27.0" "@babel/plugin-syntax-typescript@^7.25.9": version "7.25.9" @@ -434,67 +434,72 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-typescript@^7.22.5": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" - integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz#a29fd3481da85601c7e34091296e9746d2cccba8" + integrity sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.0" + "@babel/helper-plugin-utils" "^7.26.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" "@babel/plugin-syntax-typescript" "^7.25.9" "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.6", "@babel/runtime@^7.17.2", "@babel/runtime@^7.24.5": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== +"@babel/runtime@^7.18.6": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541" + integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== + +"@babel/template@^7.26.9", "@babel/template@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" + integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" -"@babel/traverse@^7.25.9": - version "7.26.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" - integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" + integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== dependencies: "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.3" - "@babel/parser" "^7.26.3" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.3" + "@babel/generator" "^7.27.0" + "@babel/parser" "^7.27.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" - integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" + integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== dependencies: "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" "@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.3.2", "@codemirror/autocomplete@^6.7.1": - version "6.18.4" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.4.tgz#4394f55d6771727179f2e28a871ef46bbbeb11b1" - integrity sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA== + version "6.18.6" + resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz#de26e864a1ec8192a1b241eb86addbb612964ddb" + integrity sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.17.0" "@lezer/common" "^1.0.0" -"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.2.4": - version "6.8.0" - resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.8.0.tgz#92f200b66f852939bd6ebb90d48c2d9e9c813d64" - integrity sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ== +"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.0", "@codemirror/commands@^6.2.4": + version "6.8.1" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.8.1.tgz#639f5559d2f33f2582a2429c58cb0c1b925c7a30" + integrity sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.4.0" @@ -566,10 +571,10 @@ "@codemirror/language" "^6.0.0" "@lezer/java" "^1.0.0" -"@codemirror/lang-javascript@^6.0.0", "@codemirror/lang-javascript@^6.1.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@codemirror/lang-javascript/-/lang-javascript-6.2.2.tgz#7141090b22994bef85bcc5608a3bc1257f2db2ad" - integrity sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg== +"@codemirror/lang-javascript@^6.0.0", "@codemirror/lang-javascript@^6.1.2", "@codemirror/lang-javascript@^6.2.3": + version "6.2.3" + resolved "https://registry.yarnpkg.com/@codemirror/lang-javascript/-/lang-javascript-6.2.3.tgz#d705c359dc816afcd3bcdf120a559f83d31d4cda" + integrity sha512-8PR3vIWg7pSu7ur8A07pGiYHgy3hHj+mRYRCSG8q+mPIrl0F02rgpGv+DsQTHRTc30rydOsf5PZ7yjKFg2Ackw== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/language" "^6.6.0" @@ -599,9 +604,9 @@ "@lezer/lr" "^1.0.0" "@codemirror/lang-liquid@^6.0.0": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@codemirror/lang-liquid/-/lang-liquid-6.2.2.tgz#5b5a2391ac14b6af85c520b8b81ea1f344d40a62" - integrity sha512-7Dm841fk37+JQW6j2rI1/uGkJyESrjzyhiIkaLjbbR0U6aFFQvMrJn35WxQreRMADMhzkyVkZM4467OR7GR8nQ== + version "6.2.3" + resolved "https://registry.yarnpkg.com/@codemirror/lang-liquid/-/lang-liquid-6.2.3.tgz#cbdb38cbf2c59bc334292420401f88aa6c4b4b27" + integrity sha512-yeN+nMSrf/lNii3FJxVVEGQwFG0/2eDyH6gNOj+TGCa0hlNO4bhQnoO5ISnd7JOG+7zTEcI/GOoyraisFVY7jQ== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/lang-html" "^6.0.0" @@ -637,9 +642,9 @@ "@lezer/php" "^1.0.0" "@codemirror/lang-python@^6.0.0": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@codemirror/lang-python/-/lang-python-6.1.6.tgz#0c55e7e2dfa85b68be93b9692e5d3f76f284bbb2" - integrity sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg== + version "6.1.7" + resolved "https://registry.yarnpkg.com/@codemirror/lang-python/-/lang-python-6.1.7.tgz#1906234d453517d760a57c69672f0023a8649e14" + integrity sha512-mZnFTsL4lW5p9ch8uKNKeRU3xGGxr1QpESLilfON2E3fQzOa/OygEMkaDvERvXDJWJA9U9oN/D4w0ZuUzNO4+g== dependencies: "@codemirror/autocomplete" "^6.3.2" "@codemirror/language" "^6.8.0" @@ -754,9 +759,9 @@ "@codemirror/legacy-modes" "^6.4.0" "@codemirror/language@^6.0.0", "@codemirror/language@^6.10.1", "@codemirror/language@^6.3.0", "@codemirror/language@^6.4.0", "@codemirror/language@^6.6.0", "@codemirror/language@^6.8.0": - version "6.10.8" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.8.tgz#3e3a346a2b0a8cf63ee1cfe03349eb1965dce5f9" - integrity sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw== + version "6.11.0" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.11.0.tgz#5ae90972601497f4575f30811519d720bf7232c9" + integrity sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.23.0" @@ -766,38 +771,38 @@ style-mod "^4.0.0" "@codemirror/legacy-modes@^6.4.0": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-6.4.2.tgz#723a55aae21304d4c112575943d3467c9040d217" - integrity sha512-HsvWu08gOIIk303eZQCal4H4t65O/qp1V4ul4zVa3MHK5FJ0gz3qz3O55FIkm+aQUcshUOjBx38t2hPiJwW5/g== + version "6.5.0" + resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-6.5.0.tgz#21c8cf818f9ea4d6eba9f22afdfef010d1d9f754" + integrity sha512-dNw5pwTqtR1giYjaJyEajunLqxGavZqV0XRtVZyMJnNOD2HmK9DMUmuCAr6RMFGRJ4l8OeQDjpI/us+R09mQsw== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/lint@^6.0.0": - version "6.8.4" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.4.tgz#7d8aa5d1a6dec89ffcc23ad45ddca2e12e90982d" - integrity sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A== + version "6.8.5" + resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.5.tgz#9edaa808e764e28e07665b015951934c8ec3a418" + integrity sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.35.0" crelt "^1.0.5" "@codemirror/search@^6.0.0": - version "6.5.8" - resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.8.tgz#b59b3659b46184cc75d6108d7c050a4ca344c3a0" - integrity sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig== + version "6.5.10" + resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.10.tgz#7367bfc88094d078b91c752bc74140fb565b55ee" + integrity sha512-RMdPdmsrUf53pb2VwflKGHEe1XVM07hI7vV2ntgw1dmqhimpatSJKva4VA9h4TLUDOD4EIF02201oZurpnEFsg== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0", "@codemirror/state@^6.4.1", "@codemirror/state@^6.5.0": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.5.1.tgz#e5c0599f7b43cf03f19e05861317df5425c07904" - integrity sha512-3rA9lcwciEB47ZevqvD8qgbzhM9qMb8vCcQCNmDfVRPQG4JT9mSb0Jg8H7YjKGGQcFnLN323fj9jdnG59Kx6bg== +"@codemirror/state@^6.0.0", "@codemirror/state@^6.1.1", "@codemirror/state@^6.4.0", "@codemirror/state@^6.4.1", "@codemirror/state@^6.5.0": + version "6.5.2" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.5.2.tgz#8eca3a64212a83367dc85475b7d78d5c9b7076c6" + integrity sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA== dependencies: "@marijn/find-cluster-break" "^1.0.0" -"@codemirror/theme-one-dark@^6.1.2": +"@codemirror/theme-one-dark@^6.0.0", "@codemirror/theme-one-dark@^6.1.2": version "6.1.2" resolved "https://registry.yarnpkg.com/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz#fcef9f9cfc17a07836cb7da17c9f6d7231064df8" integrity sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA== @@ -808,9 +813,9 @@ "@lezer/highlight" "^1.0.0" "@codemirror/view@^6.0.0", "@codemirror/view@^6.16.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0": - version "6.36.2" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.36.2.tgz#aeb644e161440734ac5a153bf6e5b4a4355047be" - integrity sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA== + version "6.36.5" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.36.5.tgz#bb99b971322b9a3f8c7013f0ef6c4a511c0d750a" + integrity sha512-cd+FZEUlu3GQCYnguYm3EkhJ8KJVisqqUsCOKedBoAt/d9c76JUUap6U0UrpElln5k6VyrEOYliMuDAKIeDQLg== dependencies: "@codemirror/state" "^6.5.0" style-mod "^4.1.0" @@ -867,135 +872,135 @@ dependencies: tslib "^2.0.0" -"@esbuild/aix-ppc64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" - integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== - -"@esbuild/android-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" - integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== - -"@esbuild/android-arm@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" - integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== - -"@esbuild/android-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" - integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== - -"@esbuild/darwin-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" - integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== - -"@esbuild/darwin-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" - integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== - -"@esbuild/freebsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" - integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== - -"@esbuild/freebsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" - integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== - -"@esbuild/linux-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" - integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== - -"@esbuild/linux-arm@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" - integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== - -"@esbuild/linux-ia32@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" - integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== - -"@esbuild/linux-loong64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" - integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== - -"@esbuild/linux-mips64el@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" - integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== - -"@esbuild/linux-ppc64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" - integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== - -"@esbuild/linux-riscv64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" - integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== - -"@esbuild/linux-s390x@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" - integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== - -"@esbuild/linux-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" - integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== - -"@esbuild/netbsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" - integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== - -"@esbuild/netbsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" - integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== - -"@esbuild/openbsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" - integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== - -"@esbuild/openbsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" - integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== - -"@esbuild/sunos-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" - integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== - -"@esbuild/win32-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" - integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== - -"@esbuild/win32-ia32@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" - integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== - -"@esbuild/win32-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" - integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== +"@esbuild/aix-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8" + integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag== + +"@esbuild/android-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196" + integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w== + +"@esbuild/android-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee" + integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA== + +"@esbuild/android-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2" + integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg== + +"@esbuild/darwin-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423" + integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA== + +"@esbuild/darwin-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374" + integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA== + +"@esbuild/freebsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6" + integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w== + +"@esbuild/freebsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809" + integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ== + +"@esbuild/linux-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058" + integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g== + +"@esbuild/linux-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6" + integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g== + +"@esbuild/linux-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737" + integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ== + +"@esbuild/linux-loong64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a" + integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w== + +"@esbuild/linux-mips64el@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30" + integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q== + +"@esbuild/linux-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067" + integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g== + +"@esbuild/linux-riscv64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3" + integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw== + +"@esbuild/linux-s390x@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602" + integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q== + +"@esbuild/linux-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb" + integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg== + +"@esbuild/netbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac" + integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw== + +"@esbuild/netbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f" + integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg== + +"@esbuild/openbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f" + integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg== + +"@esbuild/openbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768" + integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw== + +"@esbuild/sunos-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb" + integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA== + +"@esbuild/win32-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf" + integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q== + +"@esbuild/win32-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f" + integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg== + +"@esbuild/win32-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d" + integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA== "@eslint-community/eslint-utils@^4.2.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c" + integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== dependencies: eslint-visitor-keys "^3.4.3" @@ -1138,18 +1143,18 @@ integrity sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA== "@lezer/cpp@^1.0.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@lezer/cpp/-/cpp-1.1.2.tgz#1db93b09e011e8a7a08c347c9d5b7749971253bf" - integrity sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@lezer/cpp/-/cpp-1.1.3.tgz#3029a542f4624fba0ed28f96511b34b8e7906352" + integrity sha512-ykYvuFQKGsRi6IcE+/hCSGUhb/I4WPjd3ELhEblm2wS2cOznDFzO+ubK2c+ioysOnlZ3EduV+MVQFCPzAIoY3w== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" "@lezer/css@^1.1.0", "@lezer/css@^1.1.7": - version "1.1.9" - resolved "https://registry.yarnpkg.com/@lezer/css/-/css-1.1.9.tgz#404563d361422c5a1fe917295f1527ee94845ed1" - integrity sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA== + version "1.1.11" + resolved "https://registry.yarnpkg.com/@lezer/css/-/css-1.1.11.tgz#f73ac747e44f89d729cc421f829681a85b994766" + integrity sha512-FuAnusbLBl1SEAtfN8NdShxYJiESKw9LAFysfea1T96jD3ydBn12oYjaSG1a04BQRIUd93/0D8e5CV1cUMkmQg== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" @@ -1215,9 +1220,9 @@ "@lezer/common" "^1.0.0" "@lezer/markdown@^1.0.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@lezer/markdown/-/markdown-1.4.0.tgz#404455209fbc65c029b865409efe4b6d36778ab5" - integrity sha512-mk4MYeq6ZQdxgsgRAe0G7kqPRV6Desajfa14TcHoGGXIqqj1/2ARN31VFpmrXDgvXiGBWpA7RXtv0he+UdTkGw== + version "1.4.2" + resolved "https://registry.yarnpkg.com/@lezer/markdown/-/markdown-1.4.2.tgz#39abb22dc3289a52dc313e235d80929df0ee075a" + integrity sha512-iYewCigG/517D0xJPQd7RGaCjZAFwROiH8T9h7OTtz0bRVtkxzFhGBFJ9JGKgBBs4uuo1cvxzyQ5iKhDLMcLUQ== dependencies: "@lezer/common" "^1.0.0" "@lezer/highlight" "^1.0.0" @@ -1232,9 +1237,9 @@ "@lezer/lr" "^1.1.0" "@lezer/python@^1.1.4": - version "1.1.15" - resolved "https://registry.yarnpkg.com/@lezer/python/-/python-1.1.15.tgz#14a21b3bf1997d1b578f0bb959bf2062641798a2" - integrity sha512-aVQ43m2zk4FZYedCqL0KHPEUsqZOrmAvRhkhHlVPnDD1HODDyyQv5BRIuod4DadkgBEZd53vQOtXTonNbEgjrQ== + version "1.1.17" + resolved "https://registry.yarnpkg.com/@lezer/python/-/python-1.1.17.tgz#de0529e14605430ca8935fe4b3df0252ad173318" + integrity sha512-Iz0doICPko9uv2chIfSsViNSugNa4PWhxs17jtFd0ZMt+OieDq3wxtFOdmj7wtst3FWDeJkB0CxWNot0BlYixw== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" @@ -1281,38 +1286,53 @@ resolved "https://registry.yarnpkg.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8" integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g== -"@milkdown/components@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/components/-/components-7.5.9.tgz#9d9bc996f6c55e07bc9e9e506736c5e83cfd254e" - integrity sha512-HO9cSW6rZDkOA9H9W7otQBPYc7BEYtylcsyMVr3rMKC8lTwoD+m/djBUHA39j3ZSFyCA1f2FeUWsI6neOpfx4Q== +"@milkdown/components@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/components/-/components-7.8.0.tgz#bb6ab49fd222accd49a20be1a124e226759e4e3f" + integrity sha512-pjdNDgEzspKCwWbL8FDuqm0sYsrVIpLI9VD57D47Ir7NOK6CMGm0EULGWbAf67cEtd96p0UaTNjVD1DcyYf9Og== dependencies: "@atomico/hooks" "^4.1.2" "@floating-ui/dom" "^1.5.1" - "@milkdown/exception" "7.5.9" + "@milkdown/exception" "7.8.0" "@types/lodash.debounce" "^4.0.7" "@types/lodash.throttle" "^4.1.9" atomico "^1.75.1" clsx "^2.0.0" lodash.debounce "^4.0.8" lodash.throttle "^4.1.1" - tslib "^2.5.0" + nanoid "^5.0.9" + tslib "^2.8.1" unist-util-visit "^5.0.0" -"@milkdown/core@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/core/-/core-7.5.9.tgz#8802618f9a237666f798331a859fe122916b8470" - integrity sha512-SEoOBVhLxTjpDhEn7BwpVdN/DQ05RGpCax5rOj2ldLdYt4rpQNNkITtZFMoEKjakbd7wtuLd10xJKtGgm+VzZw== +"@milkdown/core@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@milkdown/core/-/core-7.11.0.tgz#06722d8ddadcf74b10ec0f5f7b5faaf68470f2f6" + integrity sha512-W1jSajqtyKtAt0ic2OIJ4N7mlv0LgkeGo7GkuHzHChleShFR01SWBF/KBuxnzLcwN0xdLOT3Bs8MpWNJefx+nw== dependencies: - "@milkdown/exception" "7.5.9" + "@milkdown/ctx" "7.11.0" + "@milkdown/exception" "7.11.0" + "@milkdown/prose" "7.11.0" + "@milkdown/transformer" "7.11.0" remark-parse "^11.0.0" remark-stringify "^11.0.0" - tslib "^2.5.0" + tslib "^2.8.1" unified "^11.0.3" -"@milkdown/crepe@^7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/crepe/-/crepe-7.5.9.tgz#ecea05990c39f0fa06b6013b538db57f75329937" - integrity sha512-yQEyB29w22tN1YSFIIrUSSge8IM1idontcqiLt7ojhw78mJ2/pCvCdEhYLyiw0v34QOoJxMlhHVdo/MatqzVmQ== +"@milkdown/core@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/core/-/core-7.8.0.tgz#7f221b25afaa8b6a1728cd98c048a6dda29d8381" + integrity sha512-ygA5pFvxx54Xna0Mw8VwelrOMGGQtD0F6oaP9CZ3mHcjOR111iEkQOQn+V74Pi2/AGhYNMLFp69z1gS2KXCvyg== + dependencies: + "@milkdown/exception" "7.8.0" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + tslib "^2.8.1" + unified "^11.0.3" + +"@milkdown/crepe@7.8.0", "@milkdown/crepe@^7.5.9": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/crepe/-/crepe-7.8.0.tgz#69eb163a97b7f0b74734e0f266e0b8ba0df516ac" + integrity sha512-0J6Bw43DZ7C6rGCypfgk3PEK6bo7q+BzW+hVdyi4Q/tEZgxIW8y1uJVB+RBfC+2FAqGkKCO0YqOpmlXolQvagQ== dependencies: "@codemirror/commands" "^6.2.4" "@codemirror/language" "^6.10.1" @@ -1320,229 +1340,307 @@ "@codemirror/state" "^6.4.1" "@codemirror/theme-one-dark" "^6.1.2" "@codemirror/view" "^6.16.0" - "@milkdown/kit" "7.5.9" + "@milkdown/kit" "7.8.0" atomico "^1.75.1" clsx "^2.0.0" codemirror "^6.0.1" - nanoid "^5.0.0" - tslib "^2.5.0" - -"@milkdown/ctx@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/ctx/-/ctx-7.5.9.tgz#5e7251dd8bb300c7911f689d31a671e26a540a28" - integrity sha512-xMobLTHxza6qRxGBJujupIJwnY/Lr6wWzDMKZJF10vw8VZWwRHIwH+VwAgOmHTbZqiKXkLW39ogNjwUCoMumBw== - dependencies: - "@milkdown/exception" "7.5.9" - tslib "^2.5.0" - -"@milkdown/exception@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/exception/-/exception-7.5.9.tgz#57e72c15f94af67d5a5f6ba2604eae52c1367287" - integrity sha512-9g+WpiRjgLsVlHt7DotlUmKK9oT6Lsr5TgxE0NdDvtr81CC43mgNtoekI6rg/PatEBBXifDK1GJJ4LKnRSseVQ== - dependencies: - tslib "^2.5.0" - -"@milkdown/kit@7.5.9", "@milkdown/kit@^7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/kit/-/kit-7.5.9.tgz#c0d05c5b688b9a592940d4988173a7bd38390229" - integrity sha512-AxDX15+lVw5zAdFO73KE3VT/8TNzkkHfsGC6Nm5hv3qgTARNuTKs5m7o0PwhdlPoPH9JJjDdy0v0Eqw5LFxkbA== - dependencies: - "@milkdown/components" "7.5.9" - "@milkdown/core" "7.5.9" - "@milkdown/ctx" "7.5.9" - "@milkdown/plugin-block" "7.5.9" - "@milkdown/plugin-clipboard" "7.5.9" - "@milkdown/plugin-cursor" "7.5.9" - "@milkdown/plugin-history" "7.5.9" - "@milkdown/plugin-indent" "7.5.9" - "@milkdown/plugin-listener" "7.5.9" - "@milkdown/plugin-slash" "7.5.9" - "@milkdown/plugin-tooltip" "7.5.9" - "@milkdown/plugin-trailing" "7.5.9" - "@milkdown/plugin-upload" "7.5.9" - "@milkdown/preset-commonmark" "7.5.9" - "@milkdown/preset-gfm" "7.5.9" - "@milkdown/prose" "7.5.9" - "@milkdown/transformer" "7.5.9" - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" - -"@milkdown/plugin-block@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-block/-/plugin-block-7.5.9.tgz#ff1fe675d545d7219a97ee03167ff236e4693fd1" - integrity sha512-YosoNhxXsE1/NZQzuoY+E37TU+rQSjCCg33EgCPqjwGr+3Js7dTFo3Pw8d13tLFyNhfFYXcsZeaA4LUV1v+ucw== + katex "^0.16.0" + nanoid "^5.0.9" + prosemirror-virtual-cursor "^0.4.2" + remark-math "^6.0.0" + tslib "^2.8.1" + unist-util-visit "^5.0.0" + +"@milkdown/ctx@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@milkdown/ctx/-/ctx-7.11.0.tgz#149f1cdc2f58088a7ff176c87bf62b5718bbd167" + integrity sha512-EE7Yc346UGiux6FvpQIPZFohmf9R+e2YOmG5CQgy0ZuliS7JwYHf8yItizrda2/jwVKmABGVWi5fgI93j5gB6w== + dependencies: + "@milkdown/exception" "7.11.0" + tslib "^2.8.1" + +"@milkdown/ctx@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/ctx/-/ctx-7.8.0.tgz#d8eb109b09fc29a19b69f8a098de4e32e9a0a60c" + integrity sha512-xY/dp0/NZlKPjCiKNXmllMnUZdPBScGMhGTcCcUqL2KTIqdjHiyaryo7VwWI0neLcAJIZVAQYX7RgWOP/SrLqQ== + dependencies: + "@milkdown/exception" "7.8.0" + tslib "^2.8.1" + +"@milkdown/exception@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@milkdown/exception/-/exception-7.11.0.tgz#5db44d3481ded8f49eadbfe122464b385df7736e" + integrity sha512-XMAsa9MAhasZl7pj29SuKfTVPt78wp1XMFUKOIEPOcqJJb/ojcpC430R1HdVdq0Ue8zKLSZU99VAgODaMbgYWA== + dependencies: + tslib "^2.8.1" + +"@milkdown/exception@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/exception/-/exception-7.8.0.tgz#1f242aabeaef6f1890fd774dcc3bd1b3ae36ea2b" + integrity sha512-jwKjUV5LZjFXUjP0BbPQYtdET62szUQ8bH6hjG5p7kXbdzvbMURmF8gzFnNSfUw94uzjdPTKOeZV06veICeVyw== + dependencies: + tslib "^2.8.1" + +"@milkdown/kit@7.8.0", "@milkdown/kit@^7.5.9": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/kit/-/kit-7.8.0.tgz#bec07b7bbaf198d298692cb165b0463473869768" + integrity sha512-Y+ZAz1LZSzhwWiF8/iu4fDbTm3iBrSdIVISEsmVKyJJ+8PLtNhgR8fPLazXJbxvU2UIpJ98iZONmfXuCCRAwfQ== + dependencies: + "@milkdown/components" "7.8.0" + "@milkdown/core" "7.8.0" + "@milkdown/ctx" "7.8.0" + "@milkdown/plugin-block" "7.8.0" + "@milkdown/plugin-clipboard" "7.8.0" + "@milkdown/plugin-cursor" "7.8.0" + "@milkdown/plugin-history" "7.8.0" + "@milkdown/plugin-indent" "7.8.0" + "@milkdown/plugin-listener" "7.8.0" + "@milkdown/plugin-slash" "7.8.0" + "@milkdown/plugin-tooltip" "7.8.0" + "@milkdown/plugin-trailing" "7.8.0" + "@milkdown/plugin-upload" "7.8.0" + "@milkdown/preset-commonmark" "7.8.0" + "@milkdown/preset-gfm" "7.8.0" + "@milkdown/prose" "7.8.0" + "@milkdown/transformer" "7.8.0" + "@milkdown/utils" "7.8.0" + tslib "^2.8.1" + +"@milkdown/plugin-block@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-block/-/plugin-block-7.8.0.tgz#f434794bf5fcd3e911005fddbae7657374b97213" + integrity sha512-TKm9JdRkbG1IISVbTF4nSYMtWcoCAUz1VoJ5E3jUCpGAOSL7annS9CsTUMv1NWWHZc+eH8yHoSFjSqULT9+z+Q== dependencies: "@floating-ui/dom" "^1.5.1" - "@milkdown/exception" "7.5.9" - "@milkdown/utils" "7.5.9" + "@milkdown/exception" "7.8.0" + "@milkdown/utils" "7.8.0" "@types/lodash.throttle" "^4.1.9" lodash.throttle "^4.1.1" - tslib "^2.5.0" + tslib "^2.8.1" -"@milkdown/plugin-clipboard@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-clipboard/-/plugin-clipboard-7.5.9.tgz#695a59433f5ec39f9ab299519111b3830cf3efeb" - integrity sha512-LAwVf4vS0G0ncwFrsGv/k6Htk/hOL+AkZI1nqMeFSLbv1GLHAJoZxYkQ7hHYL3FHxWjCZNNOs2Y9Wrs4zf06pg== +"@milkdown/plugin-clipboard@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-clipboard/-/plugin-clipboard-7.8.0.tgz#a4b7c8f3f24b3f7af3ea4670767654b1c63f1150" + integrity sha512-cd+8SP8nRnb2AL1dtBokKUyajX0Ou1L/00P2Q4KU7NT9fyTGmgjxckmCKTeKlV0flXaRh/h1NN9IBctcSPr1qQ== dependencies: - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" + "@milkdown/utils" "7.8.0" + tslib "^2.8.1" -"@milkdown/plugin-cursor@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-cursor/-/plugin-cursor-7.5.9.tgz#8e6b75329dd090ab0cd63ea5f97dcf880488972a" - integrity sha512-xwfHVVuowys8g3kn9WvsDoK4fPkesQIX5ciPfAeS+X5PmE/gMYpH0AYKqIbpZlwttmO8YgkUfHXIFQmcVVumiA== +"@milkdown/plugin-cursor@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-cursor/-/plugin-cursor-7.8.0.tgz#ed0b04294153aa8fc6943f124536d5f8e40ea24b" + integrity sha512-mkiQN9OS3b8n1n1/+pTZHLC74yHYbJFiScIrgIjpslp4U3oMzFYEPugiEATqMCRXVeHhW4g1yg0eBaIcH6pgKw== dependencies: - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" + "@milkdown/utils" "7.8.0" + tslib "^2.8.1" -"@milkdown/plugin-history@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-history/-/plugin-history-7.5.9.tgz#8816521e49519bc86f73de29a16b731684795fbd" - integrity sha512-1bQw7kQuMRlRfb+lTjHw2dGPxjeKj5rTfsJAhp1FIIbUXFQOzNXwvBbhNi+eHyo9gP/VaRWe/MAUvB9aSZZZTw== +"@milkdown/plugin-history@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-history/-/plugin-history-7.8.0.tgz#cb09a50ab61200a20c8ea0bb85fa827b60091d03" + integrity sha512-QAlTzq456yGlecFMdXaBnwVdMR6/VdVRAKEkCuCgrmR0NPtkJaSbkvTyBcmQEbvHX8zTKE/wXAJYkhmnwjoBew== dependencies: - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" + "@milkdown/utils" "7.8.0" + tslib "^2.8.1" -"@milkdown/plugin-indent@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-indent/-/plugin-indent-7.5.9.tgz#32fe4a8204d5c04e218f513c95f0d95ea6bbba54" - integrity sha512-9gVzftuGaIEcCKa6ZfVoTjR9f0L2fn0/QRY7R85p8YXdFNo2ta/Ot07a2iHrxXQV2xFD6e8/L3giS1STLoh2mQ== +"@milkdown/plugin-indent@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-indent/-/plugin-indent-7.8.0.tgz#3438d2178ecebb7bf5958b7f22a21f461eedbd24" + integrity sha512-hPWEiOv5tK3vTj9X+EVxi97lzMUwgowMq2iCcgIhuv0TMq8MFEY6pWTcnh6OLmgwgSvjuEZzvN/vbGU6b3g/rg== dependencies: - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" + "@milkdown/utils" "7.8.0" + tslib "^2.8.1" -"@milkdown/plugin-listener@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-listener/-/plugin-listener-7.5.9.tgz#5e103cd97e37db3e3a95ed4052b87e4ffa7f3eab" - integrity sha512-UljHyZLmOranNF/QVZ4Jpc67tr/CsYgW/ctgnZEWg3ldgZicuZrwlTzPYym3KJkNpIYcqYeuMvmV9cO9nrivvw== +"@milkdown/plugin-listener@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-listener/-/plugin-listener-7.8.0.tgz#ad5c2512dcf4866daf2420ec79815435e6710596" + integrity sha512-I1d4It073qt0TSmwp6xufz0/p7Yq9QLY8nQkv//XUvdv3KOFBe/qOa+OdQgBRgYx/pIzJ9sd7lhRDDROO4ArGA== dependencies: - "@milkdown/utils" "7.5.9" + "@milkdown/utils" "7.8.0" "@types/lodash.debounce" "^4.0.7" lodash.debounce "^4.0.8" - tslib "^2.5.0" + tslib "^2.8.1" -"@milkdown/plugin-slash@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-slash/-/plugin-slash-7.5.9.tgz#f9a7f9a9a3d46182029da3eeb205f7469cfb035e" - integrity sha512-luGKs/3ztVjxxfW6hFo+ngu/HT8YHmwakCAOdA+8Sg1LwM9pVWEkSTPnxRaDBDif3hf8GdF6nTPsot3qIT6LtA== +"@milkdown/plugin-slash@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-slash/-/plugin-slash-7.8.0.tgz#8d3f4432e4f31850b3817225315b33b3df810a2a" + integrity sha512-d0aJbGddozSS0U9kfcfz3DeRNIGV7fCBKMTZHUOzL/LFYCMxpMHWg2V7Xtqtsj2EawSnt5jBXsBdZj/G6An+eg== dependencies: "@floating-ui/dom" "^1.5.1" - "@milkdown/exception" "7.5.9" - "@milkdown/utils" "7.5.9" + "@milkdown/exception" "7.8.0" + "@milkdown/utils" "7.8.0" "@types/lodash.debounce" "^4.0.7" lodash.debounce "^4.0.8" - tslib "^2.5.0" + tslib "^2.8.1" -"@milkdown/plugin-tooltip@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-tooltip/-/plugin-tooltip-7.5.9.tgz#7885da5fc4ddb54dbb1b5f762145ea154cf296ee" - integrity sha512-kot5o3CDA7VaZ+lDnGQRQD5SEsqdXfhaoD9oiJCAmRkrIeBXnb7jeBEO0O9VciGQe3b1AZkirH+ARfrJMd23hg== +"@milkdown/plugin-tooltip@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-tooltip/-/plugin-tooltip-7.8.0.tgz#6167632f84406205a4c027bf941e18bd35c99fb7" + integrity sha512-ndD4/J/EyJO81P46NTLmUljA7eHZE/U3S550g/EryS+iDfn42VZEoJr65EfNZVS1yj15TLj5GrnOuifnFFDpAg== dependencies: "@floating-ui/dom" "^1.5.1" - "@milkdown/exception" "7.5.9" - "@milkdown/utils" "7.5.9" - "@types/lodash.debounce" "^4.0.7" - lodash.debounce "^4.0.8" + "@milkdown/exception" "7.8.0" + "@milkdown/utils" "7.8.0" + "@types/lodash.throttle" "^4.1.9" + lodash.throttle "^4.1.1" tippy.js "^6.3.7" - tslib "^2.5.0" - -"@milkdown/plugin-trailing@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-trailing/-/plugin-trailing-7.5.9.tgz#0460070ad04253f67a6a83c46cfdbe855a54d1c4" - integrity sha512-8XFs2qodFbsUhA8gDaLvdG80y7ArYCDzdVGt/1IQFxhHbsZhmezzrrbb1alvZBolPhqTw8kfDWOo9AXQaNDgLA== - dependencies: - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" - -"@milkdown/plugin-upload@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/plugin-upload/-/plugin-upload-7.5.9.tgz#6064eefc2cfbd1f9bf9e00899d43704a3e9b2bb2" - integrity sha512-VH4Bwj8Tq8gV0u10/CabOsRstwvl5t6nUKdgSin7DuMJMkuxfuqlQzvnI30wclY+ZZUz7A9p1TNzOoaD6qUdjA== - dependencies: - "@milkdown/exception" "7.5.9" - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" - -"@milkdown/preset-commonmark@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/preset-commonmark/-/preset-commonmark-7.5.9.tgz#8933994d62b2e1cf2c6d51cc2040d4bdcff3ada2" - integrity sha512-RWs3qkj5DdLy7/LaGztc7lRlyI6KS6a/5Afrkcgo/mcWTQqpYPQxVq0oTwJsYyaRfuwxqJeXu2i/UPcdHA7Ifw== - dependencies: - "@milkdown/exception" "7.5.9" - "@milkdown/utils" "7.5.9" - "@sindresorhus/slugify" "^2.2.0" + tslib "^2.8.1" + +"@milkdown/plugin-trailing@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-trailing/-/plugin-trailing-7.8.0.tgz#e9c1fe992bf62b1546c80e6b30af8160bcb938b1" + integrity sha512-smBc1ZSLHjnwbqmmuBR032Rr15n/oGezeuF4CFpnoBOy6eLCye2bzJ3HQL0aHIUWG29oTZSiTtU2yN1un7cGvw== + dependencies: + "@milkdown/utils" "7.8.0" + tslib "^2.8.1" + +"@milkdown/plugin-upload@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-upload/-/plugin-upload-7.8.0.tgz#734a55c45a31eab4c2daa6ddf9e0e42f21348479" + integrity sha512-20cu5D0hy3A2Ry61kEOUS7xgxz3ug6WG6GVY3Z7/mnAVpiQithut/+tvdFC0ZwxahNqQ5NYP5M0VoVouiKigrw== + dependencies: + "@milkdown/exception" "7.8.0" + "@milkdown/utils" "7.8.0" + tslib "^2.8.1" + +"@milkdown/plugin-upload@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@milkdown/plugin-upload/-/plugin-upload-7.11.0.tgz#22765ead21d1b5e65a7a2c3dde7293b5490436b4" + integrity sha512-R/KEa2Yee+dJEhaKFY4aevpHjNiWbVWtXY56mIWxt1XvuA2R5Ka0nrzn8TNGe0DRw8BGRUZNsrmaA4FOQLWCzQ== + dependencies: + "@milkdown/core" "7.11.0" + "@milkdown/ctx" "7.11.0" + "@milkdown/exception" "7.11.0" + "@milkdown/prose" "7.11.0" + "@milkdown/utils" "7.11.0" + tslib "^2.8.1" + +"@milkdown/preset-commonmark@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/preset-commonmark/-/preset-commonmark-7.8.0.tgz#0b1bfe2b2256521feb1b1a0b05ed6430054700f9" + integrity sha512-HbnktClO9pTJ1V3y88TNj8Y87h+eUEiWnVBRoT2bDvO4+B5GZxRfMD9KVEZCas2/dHB+CEZFXk6hkmqlAf0WBA== + dependencies: + "@milkdown/exception" "7.8.0" + "@milkdown/utils" "7.8.0" remark-inline-links "^7.0.0" - tslib "^2.5.0" + tslib "^2.8.1" unist-util-visit "^5.0.0" -"@milkdown/preset-gfm@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/preset-gfm/-/preset-gfm-7.5.9.tgz#b33fe15ed141d1d7701f2fa59588494c3621ab4d" - integrity sha512-rtPcCT8HnL+BUW4H+740y6h+ZKrP9jLrGEihVGjCeAkRH4TFEMhFnFNGWRT8JMxpCN0VHQKy44s6Wsa82yp9Uw== +"@milkdown/preset-gfm@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/preset-gfm/-/preset-gfm-7.8.0.tgz#1bb18e882bd4b3528f0dadc8fa4598dd0df4488d" + integrity sha512-KBlPB/wIGbraJUjSN120+3vEwiKIkd214f6f5APNes8zrQERfydDYno/Bgn/S9q0HhCFUlpwd2fE8OH0vfA65A== dependencies: - "@milkdown/exception" "7.5.9" - "@milkdown/utils" "7.5.9" + "@milkdown/exception" "7.8.0" + "@milkdown/utils" "7.8.0" prosemirror-safari-ime-span "^1.0.1" remark-gfm "^4.0.0" - tslib "^2.5.0" + tslib "^2.8.1" -"@milkdown/prose@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/prose/-/prose-7.5.9.tgz#2f7be3d5a4879f446d6994c39e8cfa533c8e56c7" - integrity sha512-y8/9mt3gXeyThK9v5joZYfsGbyQjCCRGWKZgvpYu97P+98ht6sNFqtRxvVasirqrJGLCzx8RsJAC6tSe2e/wCQ== +"@milkdown/prose@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@milkdown/prose/-/prose-7.11.0.tgz#e70e215bb1f8a135a98d073294f428cc4e6143e6" + integrity sha512-2W1XMsYxnf43vOEx459LkATu2NOFrYWw2z4rRcf1NoSVxcc/wDC1ZQegJpW7lO4/xKgkZb4V+xlCi2YZhr0+rA== dependencies: - "@milkdown/exception" "7.5.9" + "@milkdown/exception" "7.11.0" prosemirror-changeset "^2.2.1" - prosemirror-commands "^1.5.2" + prosemirror-commands "^1.6.2" prosemirror-dropcursor "^1.8.1" prosemirror-gapcursor "^1.3.2" - prosemirror-history "^1.3.2" - prosemirror-inputrules "^1.2.1" + prosemirror-history "^1.4.1" + prosemirror-inputrules "^1.4.0" prosemirror-keymap "^1.2.2" - prosemirror-model "^1.19.3" - prosemirror-schema-list "^1.3.0" + prosemirror-model "^1.24.1" + prosemirror-schema-list "^1.5.0" prosemirror-state "^1.4.3" - prosemirror-tables "^1.3.7" - prosemirror-transform "^1.7.5" - prosemirror-view "^1.31.7" - tslib "^2.5.0" + prosemirror-tables "^1.7.0" + prosemirror-transform "^1.10.2" + prosemirror-view "^1.37.1" + tslib "^2.8.1" + +"@milkdown/prose@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/prose/-/prose-7.8.0.tgz#4c6bd4c90020a6e4d7e2f8ec8f738fbd61d268eb" + integrity sha512-hijg3JEuflvYVE9+c60WT6hNZIVG8ldZWYZXcVobTxm1fJ9cOEWEMzPSrcd1w+wyYlAzYoubQaVLTQiEzi8EIQ== + dependencies: + "@milkdown/exception" "7.8.0" + prosemirror-changeset "^2.2.1" + prosemirror-commands "^1.6.2" + prosemirror-dropcursor "^1.8.1" + prosemirror-gapcursor "^1.3.2" + prosemirror-history "^1.4.1" + prosemirror-inputrules "^1.4.0" + prosemirror-keymap "^1.2.2" + prosemirror-model "^1.24.1" + prosemirror-schema-list "^1.5.0" + prosemirror-state "^1.4.3" + prosemirror-tables "^1.6.2" + prosemirror-transform "^1.10.2" + prosemirror-view "^1.37.1" + tslib "^2.8.1" "@milkdown/react@^7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/react/-/react-7.5.9.tgz#68e2d4430d3a7e2c4e37b76134dcbec6f9dc37b3" - integrity sha512-qj8BS+Q2dbHlfKkPBVCnD05GrlG3vQVxYk+DTvIiLMYLppEe8XzSbE8ml4mqngRjOfhjenpcL7BTWBCMwj+qVw== + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/react/-/react-7.8.0.tgz#4dcbbe11d5743e7f2f2d8655fe508d6792d1c4ef" + integrity sha512-D5LJrtNZZfw90R1tie0KfvkLN+ajz+pBVGoM1e+DY1wmDc7IHu0wtvt4WInyp4sFLTJJgfwlETjUNhQUvw5ECQ== dependencies: - "@milkdown/utils" "7.5.9" - tslib "^2.5.0" + "@milkdown/crepe" "7.8.0" + "@milkdown/kit" "7.8.0" + tslib "^2.8.1" "@milkdown/theme-nord@^7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/theme-nord/-/theme-nord-7.5.9.tgz#a31b0923493f5f4cdcdc19521d93b869eb4a0dd2" - integrity sha512-aVWyBvrhMyVRX7yzkArQ6XeNbgKjVawAANKDgyAatgph79DpfOYFu4MsCy765uxxIMmHINTD+iJLTlgIDRri5A== + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/theme-nord/-/theme-nord-7.8.0.tgz#9f2c1bb0e78fd88fc6967f5511bee8a72eaaa8dd" + integrity sha512-RCYb7mcjbhwwgwl/wKv+bn+fp2QU8SontZfBtOyND8eFIiMf+t6tUUe05bBj1nm0kpqCK6f3M0/DLnBbqZVY6w== dependencies: clsx "^2.0.0" - tslib "^2.5.0" + tslib "^2.8.1" -"@milkdown/transformer@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/transformer/-/transformer-7.5.9.tgz#3628e326deb79d742ca0ac60e9b6739ea1c00419" - integrity sha512-JwR5QvppncouRVcdx8/2RfTEvb2GtG2QdO9urZomrDnF0uJC6nNM/8dreOuD0fMYWPJmi/RgD+V6fMmro75E8Q== +"@milkdown/transformer@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@milkdown/transformer/-/transformer-7.11.0.tgz#992108a4a389e0dfc442cb5711284c52ac871001" + integrity sha512-+zT8HIOL/qmQwOCH+9mEpqDi8250kaCiHt6YQXIIrXfGIbScdh613ChUFjNyzAU2Za5kkmY8E3F8yPL2woTulA== dependencies: - "@milkdown/exception" "7.5.9" + "@milkdown/exception" "7.11.0" + "@milkdown/prose" "7.11.0" remark "^15.0.1" remark-parse "^11.0.0" remark-stringify "^11.0.0" - tslib "^2.5.0" + tslib "^2.8.1" unified "^11.0.3" -"@milkdown/utils@7.5.9": - version "7.5.9" - resolved "https://registry.yarnpkg.com/@milkdown/utils/-/utils-7.5.9.tgz#9107b4de4d7000468cba981ee3e431a56be021ac" - integrity sha512-udxaIdKm6pOiNACIKR7+NQ7Vj+QivhA5jcRqksEuQOfDFQBFcGaAhGEEiU1cKwE7fmP2ayigfD0IZ01rjLS2fA== +"@milkdown/transformer@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/transformer/-/transformer-7.8.0.tgz#034cb860afd5d80e2748eaae6f5944e39559d7dd" + integrity sha512-zQFiQOmd7N8f0gp2dgXkbfHw2NulkK7cztjl3jzzuwkO1m2+jUeZQNC2hJH7ZhENXSp52m4EtFEUivO4YgdXMw== dependencies: - "@milkdown/exception" "7.5.9" - nanoid "^5.0.0" - tslib "^2.5.0" + "@milkdown/exception" "7.8.0" + remark "^15.0.1" + remark-parse "^11.0.0" + remark-stringify "^11.0.0" + tslib "^2.8.1" + unified "^11.0.3" + +"@milkdown/utils@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@milkdown/utils/-/utils-7.11.0.tgz#7a260013fa76f98d1d273e2fd321588694809e74" + integrity sha512-pG8PIO9dVRsmvNaFXMoC2KvMNqkLnfBwsG/G98h7j/uctxj1m0v0eRfGyulrDjp9Gx5/XYq6tfL6eFF0KxnFqw== + dependencies: + "@milkdown/core" "7.11.0" + "@milkdown/ctx" "7.11.0" + "@milkdown/exception" "7.11.0" + "@milkdown/prose" "7.11.0" + "@milkdown/transformer" "7.11.0" + nanoid "^5.0.9" + tslib "^2.8.1" + +"@milkdown/utils@7.8.0": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@milkdown/utils/-/utils-7.8.0.tgz#01ef526e159eda0d6f180ac635d86245c3c42de7" + integrity sha512-7gFlva4Op4JqzkDZ1lbUCSG2tB9LpKUYcLstSNtS5OSomfXY4Xyk21czhIfeE/TjskTUqpZAZq+/zE/pyPhHoA== + dependencies: + "@milkdown/exception" "7.8.0" + nanoid "^5.0.9" + tslib "^2.8.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1582,10 +1680,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/number@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.0.tgz#1e95610461a09cdf8bb05c152e76ca1278d5da46" - integrity sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ== +"@radix-ui/number@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.1.tgz#7b2c9225fbf1b126539551f5985769d0048d9090" + integrity sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g== "@radix-ui/primitive@1.0.0": version "1.0.0" @@ -1601,37 +1699,37 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/primitive@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.1.tgz#fc169732d755c7fbad33ba8d0cd7fd10c90dc8e3" - integrity sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA== +"@radix-ui/primitive@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65" + integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== "@radix-ui/react-accordion@^1.1.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-1.2.2.tgz#96ac3de896189553219e342d5e773589eb119dce" - integrity sha512-b1oh54x4DMCdGsB4/7ahiSrViXxaBwRPotiZNnYXjLha9vfuURSAZErki6qjDoSIV0eXx5v57XnTGVtGwnfp2g== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collapsible" "1.1.2" - "@radix-ui/react-collection" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-controllable-state" "1.1.0" + version "1.2.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-accordion/-/react-accordion-1.2.4.tgz#7ccfceb959bbb3bac2f92e5e75b2654a488a2ff0" + integrity sha512-SGCxlSBaMvEzDROzyZjsVNzu9XY5E28B3k8jOENyrz6csOv/pG1eHyYfLJai1n9tRjwG61coXDhfpgtxKxUv5g== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-collapsible" "1.1.4" + "@radix-ui/react-collection" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-controllable-state" "1.1.1" "@radix-ui/react-alert-dialog@^1.0.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.4.tgz#1049b8765b3db16b2a992e2fb3d4afbef0c451ad" - integrity sha512-A6Kh23qZDLy3PSU4bh2UJZznOrUdHImIXqF8YtUa6CN73f8EOO9XlXSCd9IHyPvIquTaa/kwaSWzZTtUvgXVGw== + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.7.tgz#d4e07dcf9a3c67c45225c20c2800577773469454" + integrity sha512-7Gx1gcoltd0VxKoR8mc+TAVbzvChJyZryZsTam0UhoL92z0L+W8ovxvcgvd+nkz24y7Qc51JQKBAGe4+825tYw== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dialog" "1.1.4" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-slot" "1.1.1" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dialog" "1.1.7" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-slot" "1.2.0" "@radix-ui/react-arrow@1.0.3": version "1.0.3" @@ -1641,50 +1739,50 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@radix-ui/react-arrow@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz#2103721933a8bfc6e53bbfbdc1aaad5fc8ba0dd7" - integrity sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w== +"@radix-ui/react-arrow@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.3.tgz#8926eb1d87f73c2e047eac96703949f168c85861" + integrity sha512-2dvVU4jva0qkNZH6HHWuSz5FN5GeU5tymvCgutF8WaXz9WnD1NgUhy73cqzkjkN4Zkn8lfTPv5JIfrC221W+Nw== dependencies: - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.3" "@radix-ui/react-avatar@^1.0.3": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.2.tgz#24af4c66bb5271460a4a6b74c4f4f9d4789d3d90" - integrity sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig== + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.4.tgz#55dd879cd57b08265cf313b92ba1021f7f4d5abe" + integrity sha512-+kBesLBzwqyDiYCtYFK+6Ktf+N7+Y6QOTUueLGLIbLZ/YeyFW6bsBGDsN+5HxHpM55C90u5fxsg0ErxzXTcwKA== dependencies: - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-checkbox@^1.0.4": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.1.3.tgz#0e2ab913fddf3c88603625f7a9457d73882c8a32" - integrity sha512-HD7/ocp8f1B3e6OHygH0n7ZKjONkhciy1Nh0yuBgObqThc3oyx+vuMfFHKAknXRHHWVE9XvXStxJFyjUmB8PIw== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" - -"@radix-ui/react-collapsible@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.2.tgz#42477c428bb0d2eec35b9b47601c5ff0a6210165" - integrity sha512-PliMB63vxz7vggcyq0IxNYk8vGDrLXVWw4+W4B8YnwI1s18x7YZYqlG9PLX7XxAJUi0g2DxP4XKJMFHh/iVh9A== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" + version "1.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.1.5.tgz#b27080678d751e33ac66066269453be9bdaa429b" + integrity sha512-B0gYIVxl77KYDR25AY9EGe/G//ef85RVBIxQvK+m5pxAC7XihAc/8leMHhDvjvhDu02SBSb6BuytlWr/G7F3+g== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-controllable-state" "1.1.1" + "@radix-ui/react-use-previous" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + +"@radix-ui/react-collapsible@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.4.tgz#59729939c0c5db978934c688aa5f8229876d8f3f" + integrity sha512-u7LCw1EYInQtBNLGjm9nZ89S/4GcvX1UR5XbekEgnQae2Hkpq39ycJ1OhdeN1/JDfVNG91kWaWoest127TaEKQ== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-controllable-state" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-collection@1.0.3": version "1.0.3" @@ -1697,15 +1795,15 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-slot" "1.0.2" -"@radix-ui/react-collection@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.1.tgz#be2c7e01d3508e6d4b6d838f492e7d182f17d3b0" - integrity sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA== +"@radix-ui/react-collection@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.3.tgz#cfd46dcea5a8ab064d91798feeb46faba4032930" + integrity sha512-mM2pxoQw5HJ49rkzwOs7Y6J4oYH22wS8BfK2/bBxROlI4xuR0c4jEenQP63LlTlDkO6Buj2Vt+QYAYcOgqtrXA== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-slot" "1.2.0" "@radix-ui/react-compose-refs@1.0.0": version "1.0.0" @@ -1721,10 +1819,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-compose-refs@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz#6f766faa975f8738269ebb8a23bad4f5a8d2faec" - integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw== +"@radix-ui/react-compose-refs@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" + integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== "@radix-ui/react-context@1.0.0": version "1.0.0" @@ -1740,10 +1838,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-context@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" - integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== "@radix-ui/react-dialog@1.0.0": version "1.0.0" @@ -1766,25 +1864,25 @@ aria-hidden "^1.1.1" react-remove-scroll "2.5.4" -"@radix-ui/react-dialog@1.1.4", "@radix-ui/react-dialog@^1.0.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.4.tgz#d68e977acfcc0d044b9dab47b6dd2c179d2b3191" - integrity sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.3" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.1" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-portal" "1.1.3" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-slot" "1.1.1" - "@radix-ui/react-use-controllable-state" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "^2.6.1" +"@radix-ui/react-dialog@1.1.7", "@radix-ui/react-dialog@^1.0.4": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.7.tgz#c826d997d9e512bd2a2adb3245bb9dffe56e02aa" + integrity sha512-EIdma8C0C/I6kL6sO02avaCRqi3fmWJpxH6mqbVScorW6nNktzKJT/le7VPho3o/7wCsyRg3z0+Q+Obr0Gy/VQ== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.6" + "@radix-ui/react-focus-guards" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.3" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-portal" "1.1.5" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-use-controllable-state" "1.1.1" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" "@radix-ui/react-direction@1.0.1": version "1.0.1" @@ -1793,10 +1891,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-direction@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" - integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== +"@radix-ui/react-direction@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14" + integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== "@radix-ui/react-dismissable-layer@1.0.0": version "1.0.0" @@ -1822,29 +1920,29 @@ "@radix-ui/react-use-callback-ref" "1.0.1" "@radix-ui/react-use-escape-keydown" "1.0.3" -"@radix-ui/react-dismissable-layer@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.3.tgz#4ee0f0f82d53bf5bd9db21665799bb0d1bad5ed8" - integrity sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg== +"@radix-ui/react-dismissable-layer@1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.6.tgz#e72c156cac7b07614fe8e3a039ab7081ce413686" + integrity sha512-7gpgMT2gyKym9Jz2ZhlRXSg2y6cNQIK8d/cqBZ0RBCaps8pFryCWXiUKI+uHGFrhMrbGUP7U6PWgiXzIxoyF3Q== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-escape-keydown" "1.1.0" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" "@radix-ui/react-dropdown-menu@^2.0.5": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.4.tgz#5e1f453296dd9ae99224a26c36851832d26cf507" - integrity sha512-iXU1Ab5ecM+yEepGAWK8ZhMyKX4ubFdCNtol4sT9D0OVErG9PNElfx3TQhjw7n7BC5nFVz68/5//clWy+8TXzA== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-menu" "2.1.4" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-controllable-state" "1.1.0" + version "2.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.7.tgz#a18860ff69bdf061b7f8ace51db01db2eb225161" + integrity sha512-7/1LiuNZuCQE3IzdicGoHdQOHkS2Q08+7p8w6TXZ6ZjgAULaCI85ZY15yPl4o4FVgoKLRT43/rsfNVN8osClQQ== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-menu" "2.1.7" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-controllable-state" "1.1.1" "@radix-ui/react-focus-guards@1.0.0": version "1.0.0" @@ -1860,10 +1958,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-focus-guards@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe" - integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg== +"@radix-ui/react-focus-guards@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz#4ec9a7e50925f7fb661394460045b46212a33bed" + integrity sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA== "@radix-ui/react-focus-scope@1.0.0": version "1.0.0" @@ -1885,29 +1983,29 @@ "@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-use-callback-ref" "1.0.1" -"@radix-ui/react-focus-scope@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz#5c602115d1db1c4fcfa0fae4c3b09bb8919853cb" - integrity sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA== +"@radix-ui/react-focus-scope@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.3.tgz#eac83a3aac700db17650b41b30724deffac5b28a" + integrity sha512-4XaDlq0bPt7oJwR+0k0clCiCO/7lO7NKZTAaJBYxDNQT/vj4ig0/UvctrRscZaFREpRvUTkpKR96ov1e6jptQg== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-hover-card@^1.0.6": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-hover-card/-/react-hover-card-1.1.4.tgz#f334fdc1814e14a81ecb4e88a72b92326c1f89a6" - integrity sha512-QSUUnRA3PQ2UhvoCv3eYvMnCAgGQW+sTu86QPuNb+ZMi+ZENd6UWpiXbcWDQ4AEaKF9KKpCHBeaJz9Rw6lRlaQ== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.3" - "@radix-ui/react-popper" "1.2.1" - "@radix-ui/react-portal" "1.1.3" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-controllable-state" "1.1.0" + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-hover-card/-/react-hover-card-1.1.7.tgz#01b2f956daeb8a1193ccdb36c9c00943120bf2d4" + integrity sha512-HwM03kP8psrv21J1+9T/hhxi0f5rARVbqIZl9+IAq13l4j4fX+oGIuxisukZZmebO7J35w9gpoILvtG8bbph0w== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.6" + "@radix-ui/react-popper" "1.2.3" + "@radix-ui/react-portal" "1.1.5" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-controllable-state" "1.1.1" "@radix-ui/react-icons@^1.3.0": version "1.3.2" @@ -1930,64 +2028,64 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-layout-effect" "1.0.1" -"@radix-ui/react-id@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" - integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== +"@radix-ui/react-id@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7" + integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== dependencies: - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-label@^2.0.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.1.tgz#f30bd577b26873c638006e4f65761d4c6b80566d" - integrity sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw== - dependencies: - "@radix-ui/react-primitive" "2.0.1" - -"@radix-ui/react-menu@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.4.tgz#ac7aec296f29608206a7c6ef6335d8f102edaa95" - integrity sha512-BnOgVoL6YYdHAG6DtXONaR29Eq4nvbi8rutrV/xlr3RQCMMb3yqP85Qiw/3NReozrSW+4dfLkK+rc1hb4wPU/A== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.3" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.1" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-popper" "1.2.1" - "@radix-ui/react-portal" "1.1.3" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-roving-focus" "1.1.1" - "@radix-ui/react-slot" "1.1.1" - "@radix-ui/react-use-callback-ref" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "^2.6.1" + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.3.tgz#de83641c90c57e58f0d1e1943d450dbc3936a23f" + integrity sha512-zwSQ1NzSKG95yA0tvBMgv6XPHoqapJCcg9nsUBaQQ66iRBhZNhlpaQG2ERYYX4O4stkYFK5rxj5NsWfO9CS+Hg== + dependencies: + "@radix-ui/react-primitive" "2.0.3" + +"@radix-ui/react-menu@2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.7.tgz#e85f47e3762245d88d7a3bad3f2268c21f835111" + integrity sha512-tBODsrk68rOi1/iQzbM54toFF+gSw/y+eQgttFflqlGekuSebNqvFNHjJgjqPhiMb4Fw9A0zNFly1QT6ZFdQ+Q== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-collection" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.6" + "@radix-ui/react-focus-guards" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.3" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.3" + "@radix-ui/react-portal" "1.1.5" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-roving-focus" "1.1.3" + "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-use-callback-ref" "1.1.1" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" "@radix-ui/react-popover@^1.0.6": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.4.tgz#d83104e5fb588870a673b55f3387da4844e5836e" - integrity sha512-aUACAkXx8LaFymDma+HQVji7WhvEhpFJ7+qPz17Nf4lLZqtreGOFRiNQWQmhzp7kEWg9cOyyQJpdIMUMPc/CPw== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.3" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.1" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-popper" "1.2.1" - "@radix-ui/react-portal" "1.1.3" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-slot" "1.1.1" - "@radix-ui/react-use-controllable-state" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "^2.6.1" + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popover/-/react-popover-1.1.7.tgz#4397a5c1a4b2c03efe350cf467a8ddd720115c39" + integrity sha512-I38OYWDmJF2kbO74LX8UsFydSHWOJuQ7LxPnTefjxxvdvPLempvAnmsyX9UsBlywcbSGpRH7oMLfkUf+ij4nrw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.6" + "@radix-ui/react-focus-guards" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.3" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.3" + "@radix-ui/react-portal" "1.1.5" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-use-controllable-state" "1.1.1" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" "@radix-ui/react-popper@1.1.2": version "1.1.2" @@ -2006,21 +2104,21 @@ "@radix-ui/react-use-size" "1.0.1" "@radix-ui/rect" "1.0.1" -"@radix-ui/react-popper@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.1.tgz#2fc66cfc34f95f00d858924e3bee54beae2dff0a" - integrity sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw== +"@radix-ui/react-popper@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.3.tgz#3b6ef3388fd209bb46341e1e40125b75f07f1304" + integrity sha512-iNb9LYUMkne9zIahukgQmHlSBp9XWGeQQ7FvUGNk45ywzOb6kQa+Ca38OphXlWDiKvyneo9S+KSJsLfLt8812A== dependencies: "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-use-rect" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" - "@radix-ui/rect" "1.1.0" + "@radix-ui/react-arrow" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-rect" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + "@radix-ui/rect" "1.1.1" "@radix-ui/react-portal@1.0.0": version "1.0.0" @@ -2038,13 +2136,13 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@radix-ui/react-portal@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.3.tgz#b0ea5141103a1671b715481b13440763d2ac4440" - integrity sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw== +"@radix-ui/react-portal@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.5.tgz#50ed6bee2d895c9a9dfc28625f24b8483b74d431" + integrity sha512-ps/67ZqsFm+Mb6lSPJpfhRLrVL2i2fntgCmGMqqth4eaGUf+knAuuRtWVJrNjUhExgmdRqftSgzpf0DF0n6yXA== dependencies: - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-presence@1.0.0": version "1.0.0" @@ -2055,13 +2153,13 @@ "@radix-ui/react-compose-refs" "1.0.0" "@radix-ui/react-use-layout-effect" "1.0.0" -"@radix-ui/react-presence@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.2.tgz#bb764ed8a9118b7ec4512da5ece306ded8703cdc" - integrity sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg== +"@radix-ui/react-presence@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.3.tgz#ce3400caec9892ceb862f96ddaa2add080c09b90" + integrity sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-primitive@1.0.0": version "1.0.0" @@ -2079,66 +2177,66 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-slot" "1.0.2" -"@radix-ui/react-primitive@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz#6d9efc550f7520135366f333d1e820cf225fad9e" - integrity sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg== +"@radix-ui/react-primitive@2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.3.tgz#13c654dc4754558870a9c769f6febe5980a1bad8" + integrity sha512-Pf/t/GkndH7CQ8wE2hbkXA+WyZ83fhQQn5DDmwDiDo6AwN/fhaH8oqZ0jRjMrO2iaMhDi6P1HRx6AZwyMinY1g== dependencies: - "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-slot" "1.2.0" "@radix-ui/react-progress@^1.0.3": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-progress/-/react-progress-1.1.1.tgz#af923714ba3723be9c510536749d6c530d8670e4" - integrity sha512-6diOawA84f/eMxFHcWut0aE1C2kyE9dOyCTQOMRR2C/qPiXz/X0SaiA/RLbapQaXUCmy0/hLMf9meSccD1N0pA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-progress/-/react-progress-1.1.3.tgz#78df084607432792368070ca4b060597ebc9190a" + integrity sha512-F56aZPGTPb4qJQ/vDjnAq63oTu/DRoIG/Asb5XKOWj8rpefNLtUllR969j5QDN2sRrTk9VXIqQDRj5VvAuquaw== dependencies: - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.0.3" "@radix-ui/react-radio-group@^1.1.3": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-radio-group/-/react-radio-group-1.2.2.tgz#a37e9bd9d80b33bb8c1b7af8cf1dc9e5014e52d0" - integrity sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-roving-focus" "1.1.1" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" - -"@radix-ui/react-roving-focus@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz#3b3abb1e03646937f28d9ab25e96343667ca6520" - integrity sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" + version "1.2.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-radio-group/-/react-radio-group-1.2.4.tgz#f170fc55bd02298e5782c96c69136a78d5bb91c2" + integrity sha512-oLz7ATfKgVTUbpr5OBu6Q7hQcnV22uPT306bmG0QwgnKqBStR98RfWfJGCfW/MmhL4ISmrmmBPBW+c77SDwV9g== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-roving-focus" "1.1.3" + "@radix-ui/react-use-controllable-state" "1.1.1" + "@radix-ui/react-use-previous" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + +"@radix-ui/react-roving-focus@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.3.tgz#c992b9d30c795f5f5a668853db8f4a6e07b7284d" + integrity sha512-ufbpLUjZiOg4iYgb2hQrWXEPYX6jOLBbR27bDyAff5GYMRrCzcze8lukjuXVUQvJ6HZe8+oL+hhswDcjmcgVyg== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-collection" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.1.1" "@radix-ui/react-scroll-area@^1.0.4": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.2.tgz#28e34fd4d83e9de5d987c5e8914a7bd8be9546a5" - integrity sha512-EFI1N/S3YxZEW/lJ/H1jY3njlvTd8tBmgKEn4GHi51+aMm94i6NmAJstsm5cu3yJwYqYc93gpCPm21FeAbFk6g== - dependencies: - "@radix-ui/number" "1.1.0" - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" + version "1.2.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.4.tgz#4b6fd6fccaae26dbe73700fe8c5be5313984d8f4" + integrity sha512-G9rdWTQjOR4sk76HwSdROhPU0jZWpfozn9skU1v4N0/g9k7TmswrJn8W8WMU+aYktnLLpk5LX6fofj2bGe5NFQ== + dependencies: + "@radix-ui/number" "1.1.1" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-select@^1.2.2": version "1.2.2" @@ -2169,11 +2267,11 @@ react-remove-scroll "2.5.5" "@radix-ui/react-separator@^1.0.3": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.1.tgz#dd60621553c858238d876be9b0702287424866d2" - integrity sha512-RRiNRSrD8iUiXriq/Y5n4/3iE8HzqgLHsusUSg5jVpU2+3tqcUFPJXHDymwEypunc2sWxDUS3UC+rkZRlHedsw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.3.tgz#767ea659592efaafda3c738833ff325e54d83de5" + integrity sha512-2omrWKJvxR0U/tkIXezcc1nFMwtLU0+b/rDK40gnzJqTLWQ/TD/D5IYVefp9sC3QWfeQbpSbEA6op9MQKyaALQ== dependencies: - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.3" "@radix-ui/react-slot@1.0.0": version "1.0.0" @@ -2191,75 +2289,75 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-compose-refs" "1.0.1" -"@radix-ui/react-slot@1.1.1", "@radix-ui/react-slot@^1.0.2": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz#ab9a0ffae4027db7dc2af503c223c978706affc3" - integrity sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g== +"@radix-ui/react-slot@1.2.0", "@radix-ui/react-slot@^1.0.2": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.0.tgz#57727fc186ddb40724ccfbe294e1a351d92462ba" + integrity sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.2" "@radix-ui/react-switch@^1.0.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.1.2.tgz#61323f4cccf25bf56c95fceb3b56ce1407bc9aec" - integrity sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-switch/-/react-switch-1.1.4.tgz#a0672f67974ad11cd8e2304b04aad8ce684eb037" + integrity sha512-zGP6W8plLeogoeGMiTHJ/uvf+TE1C2chVsEwfP8YlvpQKJHktG+iCkUtCLGPAuDV8/qDSmIRPm4NggaTxFMVBQ== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-controllable-state" "1.1.1" + "@radix-ui/react-use-previous" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" "@radix-ui/react-tabs@^1.0.4": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.2.tgz#a72da059593cba30fccb30a226d63af686b32854" - integrity sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-roving-focus" "1.1.1" - "@radix-ui/react-use-controllable-state" "1.1.0" + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.4.tgz#2e43f3ef3450143281e7c1491da1e5d7941b9826" + integrity sha512-fuHMHWSf5SRhXke+DbHXj2wVMo+ghVH30vhX3XVacdXqDl+J4XWafMIGOOER861QpBx1jxgwKXL2dQnfrsd8MQ== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-roving-focus" "1.1.3" + "@radix-ui/react-use-controllable-state" "1.1.1" "@radix-ui/react-toast@^1.1.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toast/-/react-toast-1.2.4.tgz#52fe0e5f169209b7fa300673491a6bedde940279" - integrity sha512-Sch9idFJHJTMH9YNpxxESqABcAFweJG4tKv+0zo0m5XBvUSL8FM5xKcJLFLXononpePs8IclyX1KieL5SDUNgA== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.3" - "@radix-ui/react-portal" "1.1.3" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-visually-hidden" "1.1.1" + version "1.2.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toast/-/react-toast-1.2.7.tgz#57954e88061c20f12a9c6ac7cbd532d2c3ca1186" + integrity sha512-0IWTbAUKvzdpOaWDMZisXZvScXzF0phaQjWspK8RUMEUxjLbli+886mB/kXTIC3F+t5vQ0n0vYn+dsX8s+WdfA== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-collection" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.6" + "@radix-ui/react-portal" "1.1.5" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-visually-hidden" "1.1.3" "@radix-ui/react-tooltip@^1.0.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.6.tgz#eab98e9a5c876ef0abfae3cfeee229870528ed06" - integrity sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA== - dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.3" - "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-popper" "1.2.1" - "@radix-ui/react-portal" "1.1.3" - "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-slot" "1.1.1" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-visually-hidden" "1.1.1" + version "1.2.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.2.0.tgz#aee9fed9db53e4c84f525aada3436b651464a532" + integrity sha512-b1Sdc75s7zN9B8ONQTGBSHL3XS8+IcjcOIY51fhM4R1Hx8s0YbgqgyNZiri4qcYMVZK8hfCZVBiyCm7N9rs0rw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.6" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.3" + "@radix-ui/react-portal" "1.1.5" + "@radix-ui/react-presence" "1.1.3" + "@radix-ui/react-primitive" "2.0.3" + "@radix-ui/react-slot" "1.2.0" + "@radix-ui/react-use-controllable-state" "1.1.1" + "@radix-ui/react-visually-hidden" "1.1.3" "@radix-ui/react-use-callback-ref@1.0.0": version "1.0.0" @@ -2275,10 +2373,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-use-callback-ref@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" - integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== "@radix-ui/react-use-controllable-state@1.0.0": version "1.0.0" @@ -2296,12 +2394,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-callback-ref" "1.0.1" -"@radix-ui/react-use-controllable-state@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" - integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== +"@radix-ui/react-use-controllable-state@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.1.tgz#ec9c572072a6f269df7435c1652fbeebabe0f0c1" + integrity sha512-YnEXIy8/ga01Y1PN0VfaNH//MhA91JlEGVBDxDzROqwrAtG5Yr2QGEPz8A/rJA3C7ZAHryOYGaUv8fLSW2H/mg== dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-escape-keydown@1.0.0": version "1.0.0" @@ -2319,12 +2417,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-callback-ref" "1.0.1" -"@radix-ui/react-use-escape-keydown@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" - integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== dependencies: - "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-callback-ref" "1.1.1" "@radix-ui/react-use-layout-effect@1.0.0": version "1.0.0" @@ -2340,10 +2438,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-use-layout-effect@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" - integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== "@radix-ui/react-use-previous@1.0.1": version "1.0.1" @@ -2352,10 +2450,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/react-use-previous@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c" - integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og== +"@radix-ui/react-use-previous@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz#1a1ad5568973d24051ed0af687766f6c7cb9b5b5" + integrity sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ== "@radix-ui/react-use-rect@1.0.1": version "1.0.1" @@ -2365,12 +2463,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/rect" "1.0.1" -"@radix-ui/react-use-rect@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" - integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== +"@radix-ui/react-use-rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152" + integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== dependencies: - "@radix-ui/rect" "1.1.0" + "@radix-ui/rect" "1.1.1" "@radix-ui/react-use-size@1.0.1": version "1.0.1" @@ -2380,12 +2478,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-use-layout-effect" "1.0.1" -"@radix-ui/react-use-size@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" - integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== +"@radix-ui/react-use-size@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37" + integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== dependencies: - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.1" "@radix-ui/react-visually-hidden@1.0.3": version "1.0.3" @@ -2395,12 +2493,12 @@ "@babel/runtime" "^7.13.10" "@radix-ui/react-primitive" "1.0.3" -"@radix-ui/react-visually-hidden@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz#f7b48c1af50dfdc366e92726aee6d591996c5752" - integrity sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg== +"@radix-ui/react-visually-hidden@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.3.tgz#f704c49121859941a8bb50ff1e4f156058cacd0b" + integrity sha512-oXSF3ZQRd5fvomd9hmUCb2EHSZbPp3ZSHAHJJU/DlF9XoFkJBBW8RHU/E8WEH+RbSfJd/QFA0sl8ClJXknBwHQ== dependencies: - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.3" "@radix-ui/rect@1.0.1": version "1.0.1" @@ -2409,10 +2507,10 @@ dependencies: "@babel/runtime" "^7.13.10" -"@radix-ui/rect@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" - integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== +"@radix-ui/rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" + integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== "@reactflow/background@11.3.14": version "11.3.14" @@ -2480,120 +2578,110 @@ classcat "^5.0.3" zustand "^4.4.1" -"@remix-run/router@1.21.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.21.0.tgz#c65ae4262bdcfe415dbd4f64ec87676e4a56e2b5" - integrity sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA== - -"@rollup/rollup-android-arm-eabi@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809" - integrity sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q== - -"@rollup/rollup-android-arm64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad" - integrity sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w== - -"@rollup/rollup-darwin-arm64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23" - integrity sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q== - -"@rollup/rollup-darwin-x64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d" - integrity sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA== - -"@rollup/rollup-freebsd-arm64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003" - integrity sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ== - -"@rollup/rollup-freebsd-x64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360" - integrity sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw== - -"@rollup/rollup-linux-arm-gnueabihf@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9" - integrity sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg== - -"@rollup/rollup-linux-arm-musleabihf@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b" - integrity sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug== - -"@rollup/rollup-linux-arm64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528" - integrity sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw== - -"@rollup/rollup-linux-arm64-musl@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80" - integrity sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA== - -"@rollup/rollup-linux-loongarch64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e" - integrity sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc" - integrity sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw== - -"@rollup/rollup-linux-riscv64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e" - integrity sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw== - -"@rollup/rollup-linux-s390x-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea" - integrity sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA== - -"@rollup/rollup-linux-x64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588" - integrity sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg== - -"@rollup/rollup-linux-x64-musl@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01" - integrity sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow== - -"@rollup/rollup-win32-arm64-msvc@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52" - integrity sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw== - -"@rollup/rollup-win32-ia32-msvc@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e" - integrity sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw== - -"@rollup/rollup-win32-x64-msvc@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c" - integrity sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og== - -"@sindresorhus/slugify@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-2.2.1.tgz#fa2e2e25d6e1e74a2eeb5e2c37f5ccc516ed2c4b" - integrity sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw== - dependencies: - "@sindresorhus/transliterate" "^1.0.0" - escape-string-regexp "^5.0.0" - -"@sindresorhus/transliterate@^1.0.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz#2309fff65a868047e6d2dd70dec747c5b36a8327" - integrity sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ== - dependencies: - escape-string-regexp "^5.0.0" +"@remix-run/router@1.23.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.0.tgz#35390d0e7779626c026b11376da6789eb8389242" + integrity sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA== + +"@rollup/rollup-android-arm-eabi@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz#1d8cc5dd3d8ffe569d8f7f67a45c7909828a0f66" + integrity sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA== + +"@rollup/rollup-android-arm64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz#9c136034d3d9ed29d0b138c74dd63c5744507fca" + integrity sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ== + +"@rollup/rollup-darwin-arm64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz#830d07794d6a407c12b484b8cf71affd4d3800a6" + integrity sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q== + +"@rollup/rollup-darwin-x64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz#b26f0f47005c1fa5419a880f323ed509dc8d885c" + integrity sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ== + +"@rollup/rollup-freebsd-arm64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz#2b60c81ac01ff7d1bc8df66aee7808b6690c6d19" + integrity sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ== + +"@rollup/rollup-freebsd-x64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz#4826af30f4d933d82221289068846c9629cc628c" + integrity sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q== + +"@rollup/rollup-linux-arm-gnueabihf@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz#a1f4f963d5dcc9e5575c7acf9911824806436bf7" + integrity sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g== + +"@rollup/rollup-linux-arm-musleabihf@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz#e924b0a8b7c400089146f6278446e6b398b75a06" + integrity sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw== + +"@rollup/rollup-linux-arm64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz#cb43303274ec9a716f4440b01ab4e20c23aebe20" + integrity sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ== + +"@rollup/rollup-linux-arm64-musl@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz#531c92533ce3d167f2111bfcd2aa1a2041266987" + integrity sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA== + +"@rollup/rollup-linux-loongarch64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz#53403889755d0c37c92650aad016d5b06c1b061a" + integrity sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz#f669f162e29094c819c509e99dbeced58fc708f9" + integrity sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ== + +"@rollup/rollup-linux-riscv64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz#4bab37353b11bcda5a74ca11b99dea929657fd5f" + integrity sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ== + +"@rollup/rollup-linux-riscv64-musl@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz#4d66be1ce3cfd40a7910eb34dddc7cbd4c2dd2a5" + integrity sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA== + +"@rollup/rollup-linux-s390x-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz#7181c329395ed53340a0c59678ad304a99627f6d" + integrity sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA== + +"@rollup/rollup-linux-x64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz#00825b3458094d5c27cb4ed66e88bfe9f1e65f90" + integrity sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA== + +"@rollup/rollup-linux-x64-musl@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz#81caac2a31b8754186f3acc142953a178fcd6fba" + integrity sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg== + +"@rollup/rollup-win32-arm64-msvc@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz#3a3f421f5ce9bd99ed20ce1660cce7cee3e9f199" + integrity sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ== + +"@rollup/rollup-win32-ia32-msvc@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz#a44972d5cdd484dfd9cf3705a884bf0c2b7785a7" + integrity sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ== + +"@rollup/rollup-win32-x64-msvc@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz#bfe0214e163f70c4fec1c8f7bb8ce266f4c05b7e" + integrity sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug== "@socket.io/component-emitter@~3.1.0": version "3.1.2" @@ -2611,28 +2699,28 @@ postcss-selector-parser "6.0.10" "@tanstack/react-table@^8.9.3": - version "8.20.6" - resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.20.6.tgz#a1f3103327aa59aa621931f4087a7604a21054d0" - integrity sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ== + version "8.21.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.21.2.tgz#6a7fce828b64547e33f4606ada8114db496007cc" + integrity sha512-11tNlEDTdIhMJba2RBH+ecJ9l1zgS2kjmexDPAraulc8jeNA4xocSNeyzextT0XJyASil4XsCYlJmf5jEWAtYg== dependencies: - "@tanstack/table-core" "8.20.5" + "@tanstack/table-core" "8.21.2" "@tanstack/react-virtual@^3.0.0-beta.60": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz#d6b9bd999c181f0a2edce270c87a2febead04322" - integrity sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ== + version "3.13.6" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.13.6.tgz#30243c8c3166673caf66bfbf5352e1b314a3a4cd" + integrity sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA== dependencies: - "@tanstack/virtual-core" "3.11.2" + "@tanstack/virtual-core" "3.13.6" -"@tanstack/table-core@8.20.5": - version "8.20.5" - resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.20.5.tgz#3974f0b090bed11243d4107283824167a395cf1d" - integrity sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg== +"@tanstack/table-core@8.21.2": + version "8.21.2" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.2.tgz#dd57595a1773652bb6fb437e90a5f5386a49fd7e" + integrity sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA== -"@tanstack/virtual-core@3.11.2": - version "3.11.2" - resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz#00409e743ac4eea9afe5b7708594d5fcebb00212" - integrity sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw== +"@tanstack/virtual-core@3.13.6": + version "3.13.6" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.13.6.tgz#329f962f1596b3280736c266a982897ed2112157" + integrity sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg== "@ts-morph/common@~0.19.0": version "0.19.0" @@ -2656,9 +2744,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" @@ -2671,9 +2759,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" + integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== dependencies: "@babel/types" "^7.20.7" @@ -2778,9 +2866,9 @@ "@types/d3-color" "*" "@types/d3-path@*": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.0.tgz#2b907adce762a78e98828f0b438eaca339ae410a" - integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.1.tgz#f632b380c3aca1dba8e34aa049bcd6a4af23df8a" + integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== "@types/d3-polygon@*": version "3.0.2" @@ -2803,9 +2891,9 @@ integrity sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ== "@types/d3-scale@*": - version "4.0.8" - resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.8.tgz#d409b5f9dcf63074464bf8ddfb8ee5a1f95945bb" - integrity sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ== + version "4.0.9" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.9.tgz#57a2f707242e6fe1de81ad7bfcccaaf606179afb" + integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== dependencies: "@types/d3-time" "*" @@ -2901,15 +2989,15 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@1.0.6", "@types/estree@^1.0.0": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== +"@types/estree@*", "@types/estree@1.0.7", "@types/estree@^1.0.0": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== "@types/geojson@*": - version "7946.0.15" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.15.tgz#f9d55fd5a0aa2de9dc80b1b04e437538b7298868" - integrity sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA== + version "7946.0.16" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.16.tgz#8ebe53d69efada7044454e3305c19017d97ced2a" + integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== "@types/hast@^2.0.0": version "2.3.10" @@ -2925,6 +3013,11 @@ dependencies: "@types/unist" "*" +"@types/katex@^0.16.0": + version "0.16.7" + resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.16.7.tgz#03ab680ab4fa4fbc6cb46ecf987ecad5d8019868" + integrity sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ== + "@types/lodash.debounce@^4.0.7": version "4.0.9" resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz#0f5f21c507bce7521b5e30e7a24440975ac860a5" @@ -2940,9 +3033,9 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.17.14" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.14.tgz#bafc053533f4cdc5fcc9635af46a963c1f3deaff" - integrity sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A== + version "4.17.16" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.16.tgz#94ae78fab4a38d73086e962d0b65c30d816bfb0a" + integrity sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g== "@types/mdast@^4.0.0": version "4.0.4" @@ -2952,14 +3045,14 @@ "@types/unist" "*" "@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@^20.4.2": - version "20.17.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.12.tgz#ee3b7d25a522fd95608c1b3f02921c97b93fcbd6" - integrity sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw== + version "20.17.30" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.30.tgz#1d93f656d3b869dbef7b796568ac457606ba58d0" + integrity sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg== dependencies: undici-types "~6.19.2" @@ -2974,14 +3067,14 @@ integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== "@types/react-dom@^18.2.6": - version "18.3.5" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716" - integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q== + version "18.3.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.6.tgz#fa59a5e9a33499a792af6c1130f55921ef49d268" + integrity sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw== "@types/react@^18.2.14": - version "18.3.18" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.18.tgz#9b382c4cd32e13e463f97df07c2ee3bbcd26904b" - integrity sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ== + version "18.3.20" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.20.tgz#b0dccda9d2f1bc24d2a04b1d0cb5d0b9a3576ad3" + integrity sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -2996,11 +3089,36 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== +"@uiw/codemirror-extensions-basic-setup@4.23.12": + version "4.23.12" + resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.12.tgz#fb2e6a4d70c7d83f6bc54b5219ee9e84f8fa9eae" + integrity sha512-l9vuiXOTFDBetYrRLDmz3jDxQHDsrVAZ2Y6dVfmrqi2AsulsDu+y7csW0JsvaMqo79rYkaIZg8yeqmDgMb7VyQ== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/commands" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/lint" "^6.0.0" + "@codemirror/search" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@uiw/copy-to-clipboard@~1.0.12": version "1.0.17" resolved "https://registry.yarnpkg.com/@uiw/copy-to-clipboard/-/copy-to-clipboard-1.0.17.tgz#86f501ddc8a6db0b45e6899bcd9d48e0b78f233e" integrity sha512-O2GUHV90Iw2VrSLVLK0OmNIMdZ5fgEg4NhvtwINsX+eZ/Wf6DWD0TdsK9xwV7dNRnK/UI2mQtl0a2/kRgm1m1A== +"@uiw/react-codemirror@^4.23.12": + version "4.23.12" + resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.23.12.tgz#facb1458291937998818c1e11a123976df606a79" + integrity sha512-yseqWdzoAAGAW7i/NiU8YrfSLVOEBjQvSx1KpDTFVV/nn0AlAZoDVTIPEBgdXrPlVUQoCrwgpEaj3uZCklk9QA== + dependencies: + "@babel/runtime" "^7.18.6" + "@codemirror/commands" "^6.1.0" + "@codemirror/state" "^6.1.1" + "@codemirror/theme-one-dark" "^6.0.0" + "@uiw/codemirror-extensions-basic-setup" "4.23.12" + codemirror "^6.0.0" + "@uiw/react-markdown-preview@^5.0.6": version "5.1.3" resolved "https://registry.yarnpkg.com/@uiw/react-markdown-preview/-/react-markdown-preview-5.1.3.tgz#edbffb9e3dde910e6bc862e8d17019c838b265f0" @@ -3031,9 +3149,9 @@ rehype-prism-plus "~2.0.0" "@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" - integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== "@uppercod/exp-route@^1.4.2": version "1.4.2" @@ -3062,9 +3180,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== agent-base@^7.0.2: version "7.1.3" @@ -3126,7 +3244,7 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-hidden@^1.1.1: +aria-hidden@^1.1.1, aria-hidden@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== @@ -3156,21 +3274,21 @@ attr-accept@^2.2.4: integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== autoprefixer@^10.4.14: - version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + version "10.4.21" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.1" + picocolors "^1.1.1" postcss-value-parser "^4.2.0" -axios@^1.7.4: - version "1.7.9" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" - integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== +axios@^1.8.2: + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -3237,7 +3355,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.23.3, browserslist@^4.24.0: +browserslist@^4.24.0, browserslist@^4.24.4: version "4.24.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== @@ -3260,6 +3378,14 @@ cal-sans@^1.0.1: resolved "https://registry.yarnpkg.com/cal-sans/-/cal-sans-1.0.1.tgz#691bbf04ae5cabd1f827dd842923cee419f57aa9" integrity sha512-XwN3/7jez8WmFVcNnNqO2K9lh133KiIcURCyGFnSM+ZmNZ8zIcOTNfr3SpenLAkRceYsq+fQNX/PL4C1rIkEPQ== +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3270,10 +3396,10 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: - version "1.0.30001692" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz#4585729d95e6b95be5b439da6ab55250cd125bf9" - integrity sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A== +caniuse-lite@^1.0.30001688, caniuse-lite@^1.0.30001702: + version "1.0.30001713" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz#6b33a8857e6c7dcb41a0caa2dd0f0489c823a52d" + integrity sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q== ccount@^2.0.0: version "2.0.1" @@ -3389,7 +3515,7 @@ code-block-writer@^12.0.0: resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-12.0.0.tgz#4dd58946eb4234105aff7f0035977b2afdc2a770" integrity sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w== -codemirror@^6.0.1: +codemirror@^6.0.0, codemirror@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" integrity sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg== @@ -3436,10 +3562,15 @@ commander@^4.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + compute-scroll-into-view@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz#753f11d972596558d8fe7c6bcbc8497690ab4c87" - integrity sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz#02c3386ec531fb6a9881967388e53e8564f3e9aa" + integrity sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw== concat-map@0.0.1: version "0.0.1" @@ -3466,7 +3597,7 @@ crelt@^1.0.5: resolved "https://registry.yarnpkg.com/crelt/-/crelt-1.0.6.tgz#7cc898ea74e190fb6ef9dae57f8f81cf7302df72" integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -3476,9 +3607,9 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: which "^2.0.1" css-selector-parser@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-3.0.5.tgz#9b636ebccf7c4bcce5c1ac21ae27de9f01180ae9" - integrity sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g== + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-3.1.1.tgz#d6635dad07e54d0985884c148d8c35e404b0a2a6" + integrity sha512-Y+DuvJ7JAjpL1f4DeILe5sXCC3kRXMl0DxM4lAWbS8/jEZ29o3V0L5TL6zIifj4Csmj6c+jiF2ENjida2OVOGA== cssesc@^3.0.0: version "3.0.0" @@ -3572,9 +3703,9 @@ debug@~4.3.1, debug@~4.3.2: ms "^2.1.3" decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz#5d6ce68792808901210dac42a8e9853511e2b8bf" + integrity sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w== dependencies: character-entities "^2.0.0" @@ -3640,9 +3771,9 @@ doctrine@^3.0.0: esutils "^2.0.2" downshift@^9.0.6: - version "9.0.8" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-9.0.8.tgz#a7fea7c522e31d72ccee7947fa8069ec5e7c30fb" - integrity sha512-59BWD7+hSUQIM1DeNPLirNNnZIO9qMdIK5GQ/Uo8q34gT4B78RBlb9dhzgnh0HfQTJj4T/JKYD8KoLAlMWnTsA== + version "9.0.9" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-9.0.9.tgz#fd683a376a21bcc52f0d13d6cda47b4ea521f62b" + integrity sha512-ygOT8blgiz5liDuEFAIaPeU4dDEa+w9p6PHVUisPIjrkF5wfR59a52HpGWAVVMoWnoFO8po2mZSScKZueihS7g== dependencies: "@babel/runtime" "^7.24.5" compute-scroll-into-view "^3.1.0" @@ -3650,15 +3781,24 @@ downshift@^9.0.6: react-is "18.2.0" tslib "^2.6.2" +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.5.73: - version "1.5.80" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.80.tgz#ca7a8361d7305f0ec9e203ce4e633cbb8a8ef1b1" - integrity sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw== + version "1.5.136" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz#854b45e6a892137762cb026ed6ec77391fc5c07b" + integrity sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ== emoji-regex@^8.0.0: version "8.0.0" @@ -3682,9 +3822,9 @@ engine.io-client@~6.5.1: xmlhttprequest-ssl "~2.0.0" engine.io-client@~6.6.1: - version "6.6.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.6.2.tgz#e0a09e1c90effe5d6264da1c56d7281998f1e50b" - integrity sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw== + version "6.6.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.6.3.tgz#815393fa24f30b8e6afa8f77ccca2f28146be6de" + integrity sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" @@ -3709,36 +3849,63 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -esbuild@^0.24.2: - version "0.24.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" - integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +esbuild@^0.25.0: + version "0.25.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b" + integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ== optionalDependencies: - "@esbuild/aix-ppc64" "0.24.2" - "@esbuild/android-arm" "0.24.2" - "@esbuild/android-arm64" "0.24.2" - "@esbuild/android-x64" "0.24.2" - "@esbuild/darwin-arm64" "0.24.2" - "@esbuild/darwin-x64" "0.24.2" - "@esbuild/freebsd-arm64" "0.24.2" - "@esbuild/freebsd-x64" "0.24.2" - "@esbuild/linux-arm" "0.24.2" - "@esbuild/linux-arm64" "0.24.2" - "@esbuild/linux-ia32" "0.24.2" - "@esbuild/linux-loong64" "0.24.2" - "@esbuild/linux-mips64el" "0.24.2" - "@esbuild/linux-ppc64" "0.24.2" - "@esbuild/linux-riscv64" "0.24.2" - "@esbuild/linux-s390x" "0.24.2" - "@esbuild/linux-x64" "0.24.2" - "@esbuild/netbsd-arm64" "0.24.2" - "@esbuild/netbsd-x64" "0.24.2" - "@esbuild/openbsd-arm64" "0.24.2" - "@esbuild/openbsd-x64" "0.24.2" - "@esbuild/sunos-x64" "0.24.2" - "@esbuild/win32-arm64" "0.24.2" - "@esbuild/win32-ia32" "0.24.2" - "@esbuild/win32-x64" "0.24.2" + "@esbuild/aix-ppc64" "0.25.2" + "@esbuild/android-arm" "0.25.2" + "@esbuild/android-arm64" "0.25.2" + "@esbuild/android-x64" "0.25.2" + "@esbuild/darwin-arm64" "0.25.2" + "@esbuild/darwin-x64" "0.25.2" + "@esbuild/freebsd-arm64" "0.25.2" + "@esbuild/freebsd-x64" "0.25.2" + "@esbuild/linux-arm" "0.25.2" + "@esbuild/linux-arm64" "0.25.2" + "@esbuild/linux-ia32" "0.25.2" + "@esbuild/linux-loong64" "0.25.2" + "@esbuild/linux-mips64el" "0.25.2" + "@esbuild/linux-ppc64" "0.25.2" + "@esbuild/linux-riscv64" "0.25.2" + "@esbuild/linux-s390x" "0.25.2" + "@esbuild/linux-x64" "0.25.2" + "@esbuild/netbsd-arm64" "0.25.2" + "@esbuild/netbsd-x64" "0.25.2" + "@esbuild/openbsd-arm64" "0.25.2" + "@esbuild/openbsd-x64" "0.25.2" + "@esbuild/sunos-x64" "0.25.2" + "@esbuild/win32-arm64" "0.25.2" + "@esbuild/win32-ia32" "0.25.2" + "@esbuild/win32-x64" "0.25.2" escalade@^3.2.0: version "3.2.0" @@ -3761,9 +3928,9 @@ eslint-plugin-react-hooks@^4.6.0: integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react-refresh@^0.4.1: - version "0.4.16" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz#149dbc9279bd16942409f1c1d2f0dce3299430ef" - integrity sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ== + version "0.4.19" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz#f15020c0caa58e33fc4efda27d328281ca74e53d" + integrity sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ== eslint-scope@^7.2.2: version "7.2.2" @@ -3912,9 +4079,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" - integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -3965,9 +4132,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.15.6: version "1.15.9" @@ -3975,20 +4142,21 @@ follow-redirects@^1.15.6: integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" formdata-polyfill@^4.0.10: @@ -4004,34 +4172,34 @@ fraction.js@^4.3.7: integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== framer-motion@^11.11.11: - version "11.16.4" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.16.4.tgz#42fd3ec78e50b47812aad80de177e3125107def1" - integrity sha512-7ncPlBjrYX6iQXcTSw1kvZcHSVjEuOAW3uWuu+/+chUS4UWBMe8kCjniE4VMc2/BMo0su0Uw9sw0aWS9anpPWA== + version "11.18.2" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.18.2.tgz#0c6bd05677f4cfd3b3bdead4eb5ecdd5ed245718" + integrity sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w== dependencies: - motion-dom "^11.16.4" - motion-utils "^11.16.0" + motion-dom "^11.18.1" + motion-utils "^11.18.1" tslib "^2.4.0" -frappe-js-sdk@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.7.0.tgz#ed289a11e7cd03df71840d93687c230a1dcbebb9" - integrity sha512-M8kPf0dTzdYRpQvg/adbyioY2byLOEfNQsfK+b3ebIgXCNjX1H38GvhhU3OX9o/2x2QB65npgI7ODlUmpT6grA== +frappe-js-sdk@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.8.0.tgz#7f34338d0041cf073efd1056e000d80d69cbbb5b" + integrity sha512-wBB+mWra9uRWLKYbqUhfSu6RY9ydRQ1n0+CngllrmFqnIdxvDs/4XdZR2aLTsvFRvargi+GblDcztL3g0P/Zug== dependencies: - axios "^1.7.4" + axios "^1.8.2" frappe-react-sdk@^1.7.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.10.0.tgz#1f345069495cc62d32459af11d0f1b56a68843c0" - integrity sha512-Ft8A0hHOz71k7o0/3U2XaE5E7vQ4niN5UAR20nlGFz5WKEZq9g4/gzWHliDSLQ+8fJSMdRiK+egXeNoff4Q0PA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.11.0.tgz#18ef2e3f61a06ac31173629e7d9ac798aa89942b" + integrity sha512-YlAC9/1gV40PARpRxS39A5iJxlkN6ArDKpSf4fLcBJ8WX/aRreCW/f1E/3TLJC5fJExZ9zvn7L5CAVmsL1qvcg== dependencies: - frappe-js-sdk "^1.7.0" + frappe-js-sdk "^1.8.0" socket.io-client "4.7.1" - swr "^2.3.0" + swr "^2.3.3" fs-extra@^11.1.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -4057,11 +4225,35 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -4122,6 +4314,11 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -4137,6 +4334,18 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -4157,15 +4366,15 @@ hast-util-from-html@^2.0.0: vfile-message "^4.0.0" hast-util-from-parse5@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz#29b42758ba96535fd6021f0f533c000886c0f00f" - integrity sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A== + version "8.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e" + integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" devlop "^1.0.0" hastscript "^9.0.0" - property-information "^6.0.0" + property-information "^7.0.0" vfile "^6.0.0" vfile-location "^5.0.0" web-namespaces "^2.0.0" @@ -4225,9 +4434,9 @@ hast-util-raw@^9.0.0: zwitch "^2.0.0" hast-util-select@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-6.0.3.tgz#d30471b26efc88ae8a126ec36cd8ee6420fe3839" - integrity sha512-OVRQlQ1XuuLP8aFVLYmC2atrfWHS5UD3shonxpnyrjcCkwtvmt/+N6kYJdcY4mkMJhxp4kj2EFIxQ9kvkkt/eQ== + version "6.0.4" + resolved "https://registry.yarnpkg.com/hast-util-select/-/hast-util-select-6.0.4.tgz#1d8f69657a57441d0ce0ade35887874d3e65a303" + integrity sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -4240,15 +4449,15 @@ hast-util-select@^6.0.0: hast-util-to-string "^3.0.0" hast-util-whitespace "^3.0.0" nth-check "^2.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" unist-util-visit "^5.0.0" zwitch "^2.0.0" hast-util-to-html@^9.0.0: - version "9.0.4" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz#d689c118c875aab1def692c58603e34335a0f5c5" - integrity sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA== + version "9.0.5" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005" + integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -4257,15 +4466,15 @@ hast-util-to-html@^9.0.0: hast-util-whitespace "^3.0.0" html-void-elements "^3.0.0" mdast-util-to-hast "^13.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" stringify-entities "^4.0.0" zwitch "^2.0.4" hast-util-to-jsx-runtime@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" - integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== + version "2.3.6" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== dependencies: "@types/estree" "^1.0.0" "@types/hast" "^3.0.0" @@ -4277,9 +4486,9 @@ hast-util-to-jsx-runtime@^2.0.0: mdast-util-mdx-expression "^2.0.0" mdast-util-mdx-jsx "^3.0.0" mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" - style-to-object "^1.0.0" + style-to-js "^1.0.0" unist-util-position "^5.0.0" vfile-message "^4.0.0" @@ -4322,20 +4531,25 @@ hastscript@^7.0.0: space-separated-tokens "^2.0.0" hastscript@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.0.tgz#2b76b9aa3cba8bf6d5280869f6f6f7165c230763" - integrity sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw== + version "9.0.1" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== dependencies: "@types/hast" "^3.0.0" comma-separated-tokens "^2.0.0" hast-util-parse-selector "^4.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" +highlight.js@^11.11.1, highlight.js@~11.11.0: + version "11.11.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" + integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w== + html-to-image@^1.11.11: - version "1.11.11" - resolved "https://registry.yarnpkg.com/html-to-image/-/html-to-image-1.11.11.tgz#c0f8a34dc9e4b97b93ff7ea286eb8562642ebbea" - integrity sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA== + version "1.11.13" + resolved "https://registry.yarnpkg.com/html-to-image/-/html-to-image-1.11.13.tgz#adbc989c993b7aaf90b629c0cacf833db84d5f43" + integrity sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg== html-url-attributes@^3.0.0: version "3.0.1" @@ -4371,9 +4585,9 @@ ignore@^5.2.0: integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -4515,9 +4729,9 @@ jiti@^1.21.6: integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== jotai@^2.8.3: - version "2.11.0" - resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.11.0.tgz#923f8351e0b2d721036af892c0ae25625049d120" - integrity sha512-zKfoBBD1uDw3rljwHkt0fWuja1B76R7CjznuBO+mSX6jpsO1EBeWNRKpeaQho9yPI/pvCv4recGfgOXGxwPZvQ== + version "2.12.2" + resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.12.2.tgz#21626f5f019fc971b4da6bc528790a02d1448e3c" + integrity sha512-oN8715y7MkjXlSrpyjlR887TOuc/NLZMs9gvgtfWH/JP47ChwO0lR2ijSwBvPMYyXRAPT+liIAhuBavluKGgtA== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -4570,6 +4784,13 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +katex@^0.16.0: + version "0.16.22" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.22.tgz#d2b3d66464b1e6d69e6463b28a86ced5a02c5ccd" + integrity sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg== + dependencies: + commander "^8.3.0" + keyv@^4.5.3: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -4677,6 +4898,15 @@ loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lowlight@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-3.3.0.tgz#007b8a5bfcfd27cc65b96246d2de3e9dd4e23c6c" + integrity sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ== + dependencies: + "@types/hast" "^3.0.0" + devlop "^1.0.0" + highlight.js "~11.11.0" + lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" @@ -4699,6 +4929,11 @@ markdown-table@^3.0.0: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdast-util-definitions@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz#c1bb706e5e76bb93f9a09dd7af174002ae69ac24" @@ -4748,9 +4983,9 @@ mdast-util-gfm-autolink-literal@^2.0.0: micromark-util-character "^2.0.0" mdast-util-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" - integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== dependencies: "@types/mdast" "^4.0.0" devlop "^1.1.0" @@ -4789,9 +5024,9 @@ mdast-util-gfm-task-list-item@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" - integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== dependencies: mdast-util-from-markdown "^2.0.0" mdast-util-gfm-autolink-literal "^2.0.0" @@ -4801,6 +5036,19 @@ mdast-util-gfm@^3.0.0: mdast-util-gfm-task-list-item "^2.0.0" mdast-util-to-markdown "^2.0.0" +mdast-util-math@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-math/-/mdast-util-math-3.0.0.tgz#8d79dd3baf8ab8ac781f62b8853768190b9a00b0" + integrity sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + devlop "^1.0.0" + longest-streak "^3.0.0" + mdast-util-from-markdown "^2.0.0" + mdast-util-to-markdown "^2.1.0" + unist-util-remove-position "^5.0.0" + mdast-util-mdx-expression@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" @@ -4814,9 +5062,9 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-jsx@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" - integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" + integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -4866,7 +5114,7 @@ mdast-util-to-hast@^13.0.0: unist-util-visit "^5.0.0" vfile "^6.0.0" -mdast-util-to-markdown@^2.0.0: +mdast-util-to-markdown@^2.0.0, mdast-util-to-markdown@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== @@ -4899,9 +5147,9 @@ merge2@^1.3.0: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromark-core-commonmark@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" - integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== dependencies: decode-named-character-reference "^1.0.0" devlop "^1.0.0" @@ -4957,9 +5205,9 @@ micromark-extension-gfm-strikethrough@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-table@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz#5cadedfbb29fca7abf752447967003dc3b6583c9" - integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -4999,6 +5247,19 @@ micromark-extension-gfm@^3.0.0: micromark-util-combine-extensions "^2.0.0" micromark-util-types "^2.0.0" +micromark-extension-math@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz#c42ee3b1dd5a9a03584e83dd8f08e3de510212c1" + integrity sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg== + dependencies: + "@types/katex" "^0.16.0" + devlop "^1.0.0" + katex "^0.16.0" + micromark-factory-space "^2.0.0" + micromark-util-character "^2.0.0" + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + micromark-factory-destination@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" @@ -5129,9 +5390,9 @@ micromark-util-sanitize-uri@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-subtokenize@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz#70ffb99a454bd8c913c8b709c3dc97baefb65f96" - integrity sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -5144,14 +5405,14 @@ micromark-util-symbol@^2.0.0: integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== micromark-util-types@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" - integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== micromark@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" - integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== dependencies: "@types/debug" "^4.0.0" debug "^4.0.0" @@ -5238,9 +5499,9 @@ mkdirp@^2.1.6: integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== moment-timezone@^0.5.43: - version "0.5.46" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.46.tgz#a21aa6392b3c6b3ed916cd5e95858a28d893704a" - integrity sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw== + version "0.5.48" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" + integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw== dependencies: moment "^2.29.4" @@ -5249,17 +5510,17 @@ moment@^2.29.4: resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -motion-dom@^11.16.4: - version "11.16.4" - resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-11.16.4.tgz#7c18dbe8f8b0d4210a89992cda30f5926f003777" - integrity sha512-2wuCie206pCiP2K23uvwJeci4pMFfyQKpWI0Vy6HrCTDzDCer4TsYtT7IVnuGbDeoIV37UuZiUr6SZMHEc1Vww== +motion-dom@^11.18.1: + version "11.18.1" + resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-11.18.1.tgz#e7fed7b7dc6ae1223ef1cce29ee54bec826dc3f2" + integrity sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw== dependencies: - motion-utils "^11.16.0" + motion-utils "^11.18.1" -motion-utils@^11.16.0: - version "11.16.0" - resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-11.16.0.tgz#e75865442278be49e411ca9105c9139edc572811" - integrity sha512-ngdWPjg31rD4WGXFi0eZ00DQQqKKu04QExyv/ymlC+3k+WIgYVFbt6gS5JsFPbJODTF/r8XiE/X+SsoT9c0ocw== +motion-utils@^11.18.1: + version "11.18.1" + resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-11.18.1.tgz#671227669833e991c55813cf337899f41327db5b" + integrity sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA== ms@^2.1.3: version "2.1.3" @@ -5275,21 +5536,26 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.3.7: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== +nanoid@^3.3.8: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -nanoid@^5.0.0: - version "5.0.9" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.0.9.tgz#977dcbaac055430ce7b1e19cf0130cea91a20e50" - integrity sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q== +nanoid@^5.0.9: + version "5.1.5" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.5.tgz#f7597f9d9054eb4da9548cdd53ca70f1790e87de" + integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +next-themes@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.4.6.tgz#8d7e92d03b8fea6582892a50a928c9b23502e8b6" + integrity sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA== + node-domexception@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" @@ -5500,7 +5766,7 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.1: +picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -5516,9 +5782,9 @@ pify@^2.3.0: integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== postcss-import@^15.1.0: version "15.1.0" @@ -5572,12 +5838,12 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.26, postcss@^8.4.47, postcss@^8.4.49: - version "8.4.49" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" - integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== +postcss@^8.4.26, postcss@^8.4.47, postcss@^8.5.3: + version "8.5.3" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== dependencies: - nanoid "^3.3.7" + nanoid "^3.3.8" picocolors "^1.1.1" source-map-js "^1.2.1" @@ -5608,6 +5874,11 @@ property-information@^6.0.0: resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== +property-information@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.0.0.tgz#3508a6d6b0b8eb3ca6eb2c6623b164d2ed2ab112" + integrity sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg== + prosemirror-changeset@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz#dae94b63aec618fac7bb9061648e6e2a79988383" @@ -5615,10 +5886,10 @@ prosemirror-changeset@^2.2.1: dependencies: prosemirror-transform "^1.0.0" -prosemirror-commands@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.6.2.tgz#d9cf6654912442cff47daa1677eb43ebd0b1f117" - integrity sha512-0nDHH++qcf/BuPLYvmqZTUUsPJUCPBUXt0J1ErTcDIS369CTp773itzLGIgIXG4LJXOlwYCr44+Mh4ii6MP1QA== +prosemirror-commands@^1.6.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/prosemirror-commands/-/prosemirror-commands-1.7.0.tgz#c0a60c808f51157caa146922494fc59fe257f27c" + integrity sha512-6toodS4R/Aah5pdsrIwnTYPEjW70SlO5a66oo5Kk+CIrgJz3ukOoS+FYDGqvQlAX5PxoGWDX1oD++tn5X3pyRA== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" @@ -5643,7 +5914,7 @@ prosemirror-gapcursor@^1.3.2: prosemirror-state "^1.0.0" prosemirror-view "^1.0.0" -prosemirror-history@^1.3.2: +prosemirror-history@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.4.1.tgz#cc370a46fb629e83a33946a0e12612e934ab8b98" integrity sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ== @@ -5653,10 +5924,10 @@ prosemirror-history@^1.3.2: prosemirror-view "^1.31.0" rope-sequence "^1.3.0" -prosemirror-inputrules@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz#ef1519bb2cb0d1e0cec74bad1a97f1c1555068bb" - integrity sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg== +prosemirror-inputrules@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz#e22bfaf1d6ea4fe240ad447c184af3d520d43c37" + integrity sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA== dependencies: prosemirror-state "^1.0.0" prosemirror-transform "^1.0.0" @@ -5669,10 +5940,17 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2: prosemirror-state "^1.0.0" w3c-keyname "^2.2.0" -prosemirror-model@^1.0.0, prosemirror-model@^1.19.3, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.24.1: - version "1.24.1" - resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.24.1.tgz#b445e4f9b9cfc8c1a699215057b506842ebff1a9" - integrity sha512-YM053N+vTThzlWJ/AtPtF1j0ebO36nvbmDy4U7qA2XQB8JVaQp1FmB9Jhrps8s+z+uxhhVTny4m20ptUvhk0Mg== +prosemirror-model@^1.0.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.24.1: + version "1.25.0" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.0.tgz#c147113edc0718a14f03881e4c20367d0221f7af" + integrity sha512-/8XUmxWf0pkj2BmtqZHYJipTBMHIdVjuvFzMvEoxrtyGNmfvdhBiRwYt/eFwy2wA9DtBW3RLqvZnjurEkHaFCw== + dependencies: + orderedmap "^2.0.0" + +prosemirror-model@^1.25.0: + version "1.25.1" + resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.25.1.tgz#aeae9f1ec79fcaa76f6fc619800d91fbcf726870" + integrity sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg== dependencies: orderedmap "^2.0.0" @@ -5684,10 +5962,10 @@ prosemirror-safari-ime-span@^1.0.1: prosemirror-state "^1.4.3" prosemirror-view "^1.33.8" -prosemirror-schema-list@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.0.tgz#f05ddbe2e71efc9157a0dbedf80761c08bda5192" - integrity sha512-gg1tAfH1sqpECdhIHOA/aLg2VH3ROKBWQ4m8Qp9mBKrOxQRW61zc+gMCI8nh22gnBzd1t2u1/NPLmO3nAa3ssg== +prosemirror-schema-list@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz#5869c8f749e8745c394548bb11820b0feb1e32f5" + integrity sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q== dependencies: prosemirror-model "^1.0.0" prosemirror-state "^1.0.0" @@ -5702,33 +5980,65 @@ prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.3: prosemirror-transform "^1.0.0" prosemirror-view "^1.27.0" -prosemirror-tables@^1.3.7: - version "1.6.2" - resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.2.tgz#cec9e9ac6ecf81d67147c19ab39125d56c8351ae" - integrity sha512-97dKocVLrEVTQjZ4GBLdrrMw7Gv3no8H8yMwf5IRM9OoHrzbWpcH5jJxYgNQIRCtdIqwDctT1HdMHrGTiwp1dQ== +prosemirror-tables@^1.6.2: + version "1.6.4" + resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.6.4.tgz#e36ebca70d9e398c4a3b99b122ba86bfc985293d" + integrity sha512-TkDY3Gw52gRFRfRn2f4wJv5WOgAOXLJA2CQJYIJ5+kdFbfj3acR4JUW6LX2e1hiEBiUwvEhzH5a3cZ5YSztpIA== dependencies: prosemirror-keymap "^1.2.2" prosemirror-model "^1.24.1" prosemirror-state "^1.4.3" prosemirror-transform "^1.10.2" - prosemirror-view "^1.37.1" + prosemirror-view "^1.37.2" + +prosemirror-tables@^1.7.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz#df2507f285c6c7563097b4904cb7c4b9e0cd724b" + integrity sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q== + dependencies: + prosemirror-keymap "^1.2.2" + prosemirror-model "^1.25.0" + prosemirror-state "^1.4.3" + prosemirror-transform "^1.10.3" + prosemirror-view "^1.39.1" + +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.7.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.3.tgz#fae660bd7ffef3159aff44bc21e9e044aa31b67d" + integrity sha512-Nhh/+1kZGRINbEHmVu39oynhcap4hWTs/BlU7NnxWj3+l0qi8I1mu67v6mMdEe/ltD8hHvU4FV6PHiCw2VSpMw== + dependencies: + prosemirror-model "^1.21.0" -prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.2, prosemirror-transform@^1.7.3, prosemirror-transform@^1.7.5: - version "1.10.2" - resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.2.tgz#8ebac4e305b586cd96595aa028118c9191bbf052" - integrity sha512-2iUq0wv2iRoJO/zj5mv8uDUriOHWzXRnOTVgCzSXnktS/2iQRa3UUQwVlkBlYZFtygw6Nh1+X4mGqoYBINn5KQ== +prosemirror-transform@^1.10.3: + version "1.10.4" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz#56419eac14f9f56612c806ae46f9238648f3f02e" + integrity sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw== dependencies: prosemirror-model "^1.21.0" -prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.31.7, prosemirror-view@^1.33.8, prosemirror-view@^1.37.1: - version "1.37.1" - resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.37.1.tgz#3ccd67cd3d831eb37a2505dd34151932462172fb" - integrity sha512-MEAnjOdXU1InxEmhjgmEzQAikaS6lF3hD64MveTPpjOGNTl87iRLA1HupC/DEV6YuK7m4Q9DHFNTjwIVtqz5NA== +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.33.8, prosemirror-view@^1.37.1, prosemirror-view@^1.37.2: + version "1.39.1" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.39.1.tgz#9e24cc82649d37ed5d75bf59419694b0566927bb" + integrity sha512-GhLxH1xwnqa5VjhJ29LfcQITNDp+f1jzmMPXQfGW9oNrF0lfjPzKvV5y/bjIQkyKpwCX3Fp+GA4dBpMMk8g+ZQ== + dependencies: + prosemirror-model "^1.20.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + +prosemirror-view@^1.39.1: + version "1.39.3" + resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.39.3.tgz#54fa4b8ab4fd75ad0075dc6dc0be1745429d5a5c" + integrity sha512-bY/7kg0LzRE7ytR0zRdSMWX3sknEjw68l836ffLPMh0OG3OYnNuBDUSF3v0vjvnzgYjgY9ZH/RypbARURlcMFA== dependencies: prosemirror-model "^1.20.0" prosemirror-state "^1.0.0" prosemirror-transform "^1.1.0" +prosemirror-virtual-cursor@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/prosemirror-virtual-cursor/-/prosemirror-virtual-cursor-0.4.2.tgz#b79825a05d9c9ac78b2dd690c2d9eb67450fb42d" + integrity sha512-pUMKnIuOhhnMcgIJUjhIQTVJruBEGxfMBVQSrK0g2qhGPDm1i12KdsVaFw15dYk+29tZcxjMeR7P5VDKwmbwJg== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -5753,18 +6063,18 @@ react-dom@^18.2.0: scheduler "^0.23.2" react-dropzone@^14.2.3: - version "14.3.5" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.5.tgz#1a8bd312c8a353ec78ef402842ccb3589c225add" - integrity sha512-9nDUaEEpqZLOz5v5SUcFA0CjM4vq8YbqO0WRls+EYT7+DvxUdzDPKNCPLqGfj3YL9MsniCLCD4RFA6M95V6KMQ== + version "14.3.8" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" + integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== dependencies: attr-accept "^2.2.4" file-selector "^2.1.0" prop-types "^15.8.1" react-hook-form@^7.45.1: - version "7.54.2" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" - integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== + version "7.55.0" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.55.0.tgz#df3c80a20a68f6811f49bec3406defaefb6dce80" + integrity sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog== react-is@18.2.0: version "18.2.0" @@ -5827,33 +6137,33 @@ react-remove-scroll@2.5.5: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-remove-scroll@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.2.tgz#2518d2c5112e71ea8928f1082a58459b5c7a2a97" - integrity sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw== +react-remove-scroll@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz#df02cde56d5f2731e058531f8ffd7f9adec91ac2" + integrity sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ== dependencies: react-remove-scroll-bar "^2.3.7" - react-style-singleton "^2.2.1" + react-style-singleton "^2.2.3" tslib "^2.1.0" use-callback-ref "^1.3.3" - use-sidecar "^1.1.2" + use-sidecar "^1.1.3" react-router-dom@^6.14.1: - version "6.28.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.28.1.tgz#b78fe452d2cd31919b80e57047a896bfa1509f8c" - integrity sha512-YraE27C/RdjcZwl5UCqF/ffXnZDxpJdk9Q6jw38SZHjXs7NNdpViq2l2c7fO7+4uWaEfcwfGCv3RSg4e1By/fQ== + version "6.30.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.0.tgz#a64774104508bff56b1affc2796daa3f7e76b7df" + integrity sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA== dependencies: - "@remix-run/router" "1.21.0" - react-router "6.28.1" + "@remix-run/router" "1.23.0" + react-router "6.30.0" -react-router@6.28.1: - version "6.28.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.28.1.tgz#f82317ab24eee67d7beb7b304c0378b2b48fa178" - integrity sha512-2omQTA3rkMljmrvvo6WtewGdVh45SpL9hGiCI9uUrwGGfNFDIvGK4gYJsKlJoNVi6AQZcopSCballL+QGOm7fA== +react-router@6.30.0: + version "6.30.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.0.tgz#9789d775e63bc0df60f39ced77c8c41f1e01ff90" + integrity sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ== dependencies: - "@remix-run/router" "1.21.0" + "@remix-run/router" "1.23.0" -react-style-singleton@^2.2.1, react-style-singleton@^2.2.2: +react-style-singleton@^2.2.1, react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== @@ -5904,9 +6214,9 @@ readdirp@~3.6.0: picomatch "^2.2.1" recast@^0.23.2: - version "0.23.9" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.9.tgz#587c5d3a77c2cfcb0c18ccce6da4361528c2587b" - integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== + version "0.23.11" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.11.tgz#8885570bb28cf773ba1dc600da7f502f7883f73f" + integrity sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA== dependencies: ast-types "^0.16.1" esprima "~4.0.0" @@ -5915,9 +6225,9 @@ recast@^0.23.2: tslib "^2.0.1" refractor@^4.8.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-4.8.1.tgz#fbdd889333a3d86c9c864479622855c9b38e9d42" - integrity sha512-/fk5sI0iTgFYlmVGYVew90AoYnNMP6pooClx/XKqyeeCQXrL0Kvgn8V0VEht5ccdljbzzF1i3Q213gcntkRExg== + version "4.9.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-4.9.0.tgz#2e1c7af0157230cdd2f9086660912eadc5f68323" + integrity sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og== dependencies: "@types/hast" "^2.0.0" "@types/prismjs" "^1.0.0" @@ -5967,7 +6277,7 @@ rehype-parse@^9.0.0: hast-util-from-html "^2.0.0" unified "^11.0.0" -rehype-prism-plus@2.0.0, rehype-prism-plus@~2.0.0: +rehype-prism-plus@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rehype-prism-plus/-/rehype-prism-plus-2.0.0.tgz#75b1e2d0dd7496125987a1732cb7d560de02a0fd" integrity sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ== @@ -5979,6 +6289,18 @@ rehype-prism-plus@2.0.0, rehype-prism-plus@~2.0.0: unist-util-filter "^5.0.0" unist-util-visit "^5.0.0" +rehype-prism-plus@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/rehype-prism-plus/-/rehype-prism-plus-2.0.1.tgz#5acc4c1940f90d9170cc0e9055de240b2da899c9" + integrity sha512-Wglct0OW12tksTUseAPyWPo3srjBOY7xKlql/DPKi7HbsdZTyaLCAoO58QBKSczFQxElTsQlOY3JDOFzB/K++Q== + dependencies: + hast-util-to-string "^3.0.0" + parse-numeric-range "^1.3.0" + refractor "^4.8.0" + rehype-parse "^9.0.0" + unist-util-filter "^5.0.0" + unist-util-visit "^5.0.0" + rehype-raw@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" @@ -6028,9 +6350,9 @@ rehype@~13.0.0: unified "^11.0.0" remark-gfm@^4.0.0, remark-gfm@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" - integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== dependencies: "@types/mdast" "^4.0.0" mdast-util-gfm "^3.0.0" @@ -6055,6 +6377,16 @@ remark-inline-links@^7.0.0: mdast-util-definitions "^6.0.0" unist-util-visit "^5.0.0" +remark-math@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-6.0.0.tgz#0acdf74675f1c195fea6efffa78582f7ed7fc0d7" + integrity sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA== + dependencies: + "@types/mdast" "^4.0.0" + mdast-util-math "^3.0.0" + micromark-extension-math "^3.0.0" + unified "^11.0.0" + remark-parse@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" @@ -6066,9 +6398,9 @@ remark-parse@^11.0.0: unified "^11.0.0" remark-rehype@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" - integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== + version "11.1.2" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" + integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -6118,9 +6450,9 @@ restore-cursor@^4.0.0: signal-exit "^3.0.2" reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.2: version "3.0.2" @@ -6129,32 +6461,33 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^4.23.0: - version "4.30.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.30.1.tgz#d5c3d066055259366cdc3eb6f1d051c5d6afaf74" - integrity sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w== +rollup@^4.30.1: + version "4.39.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.39.0.tgz#9dc1013b70c0e2cb70ef28350142e9b81b3f640c" + integrity sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g== dependencies: - "@types/estree" "1.0.6" + "@types/estree" "1.0.7" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.30.1" - "@rollup/rollup-android-arm64" "4.30.1" - "@rollup/rollup-darwin-arm64" "4.30.1" - "@rollup/rollup-darwin-x64" "4.30.1" - "@rollup/rollup-freebsd-arm64" "4.30.1" - "@rollup/rollup-freebsd-x64" "4.30.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.30.1" - "@rollup/rollup-linux-arm-musleabihf" "4.30.1" - "@rollup/rollup-linux-arm64-gnu" "4.30.1" - "@rollup/rollup-linux-arm64-musl" "4.30.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.30.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.30.1" - "@rollup/rollup-linux-riscv64-gnu" "4.30.1" - "@rollup/rollup-linux-s390x-gnu" "4.30.1" - "@rollup/rollup-linux-x64-gnu" "4.30.1" - "@rollup/rollup-linux-x64-musl" "4.30.1" - "@rollup/rollup-win32-arm64-msvc" "4.30.1" - "@rollup/rollup-win32-ia32-msvc" "4.30.1" - "@rollup/rollup-win32-x64-msvc" "4.30.1" + "@rollup/rollup-android-arm-eabi" "4.39.0" + "@rollup/rollup-android-arm64" "4.39.0" + "@rollup/rollup-darwin-arm64" "4.39.0" + "@rollup/rollup-darwin-x64" "4.39.0" + "@rollup/rollup-freebsd-arm64" "4.39.0" + "@rollup/rollup-freebsd-x64" "4.39.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.39.0" + "@rollup/rollup-linux-arm-musleabihf" "4.39.0" + "@rollup/rollup-linux-arm64-gnu" "4.39.0" + "@rollup/rollup-linux-arm64-musl" "4.39.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.39.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.39.0" + "@rollup/rollup-linux-riscv64-gnu" "4.39.0" + "@rollup/rollup-linux-riscv64-musl" "4.39.0" + "@rollup/rollup-linux-s390x-gnu" "4.39.0" + "@rollup/rollup-linux-x64-gnu" "4.39.0" + "@rollup/rollup-linux-x64-musl" "4.39.0" + "@rollup/rollup-win32-arm64-msvc" "4.39.0" + "@rollup/rollup-win32-ia32-msvc" "4.39.0" + "@rollup/rollup-win32-x64-msvc" "4.39.0" fsevents "~2.3.2" rope-sequence@^1.3.0: @@ -6267,6 +6600,11 @@ socket.io-parser@~4.2.4: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" +sonner@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/sonner/-/sonner-2.0.3.tgz#de7cdbc4b6a25ac3f0a9e0aed3748e0b3d6e092e" + integrity sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA== + source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" @@ -6357,7 +6695,14 @@ style-mod@^4.0.0, style-mod@^4.1.0: resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67" integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== -style-to-object@^1.0.0: +style-to-js@^1.0.0: + version "1.1.16" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.16.tgz#e6bd6cd29e250bcf8fa5e6591d07ced7575dbe7a" + integrity sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw== + dependencies: + style-to-object "1.0.8" + +style-to-object@1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== @@ -6389,10 +6734,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -swr@^2.1.5, swr@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.3.0.tgz#66fa45023efd4199f4e7ce608c255709a135943d" - integrity sha512-NyZ76wA4yElZWBHzSgEJc28a0u6QZvhb6w0azeL2k7+Q1gAzVK+IqQYXhVOC/mzi+HZIozrZvBVeSeOZNR2bqA== +swr@^2.1.5, swr@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.3.3.tgz#9d6a703355f15f9099f45114db3ef75764444788" + integrity sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A== dependencies: dequal "^2.0.3" use-sync-external-store "^1.4.0" @@ -6440,6 +6785,11 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thememirror@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/thememirror/-/thememirror-2.0.1.tgz#ae9eb4ce7e8d0303d4fbabcc860ed38a0b45b079" + integrity sha512-d5i6FVvWWPkwrm4cHLI3t9AT1OrkAt7Ig8dtdYSofgF7C/eiyNuq6zQzSTusWTde3jpW9WLvA9J/fzNKMUsd0w== + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -6455,9 +6805,9 @@ thenify-all@^1.0.0: any-promise "^1.0.0" timeago-react@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/timeago-react/-/timeago-react-3.0.6.tgz#d1b55af67ed21b1c5429b9ba8043d0d0f7dab295" - integrity sha512-4ywnCX3iFjdp84WPK7gt8s4n0FxXbYM+xv8hYL73p83dpcMxzmO+0W4xJuxflnkWNvum5aEaqTe6LZ3lUIudjQ== + version "3.0.7" + resolved "https://registry.yarnpkg.com/timeago-react/-/timeago-react-3.0.7.tgz#5c6c79e928b8896a3bfb491dfc3fd3d461d17eca" + integrity sha512-5LSQuq+mzfEpMHkJQgMWnOs27dGh25aUQhffQpAW6q431vVVmHP194KYsM4bhzli0XfohUgN8+r3Pq6GVprN4A== dependencies: timeago.js "^4.0.0" @@ -6517,7 +6867,7 @@ tsconfig-paths@^4.2.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.7.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.7.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -6535,9 +6885,9 @@ type-fest@^0.20.2: integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== typescript@^5.0.2: - version "5.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" - integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== undici-types@~6.19.2: version "6.19.8" @@ -6580,6 +6930,14 @@ unist-util-position@^5.0.0: dependencies: "@types/unist" "^3.0.0" +unist-util-remove-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163" + integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== + dependencies: + "@types/unist" "^3.0.0" + unist-util-visit "^5.0.0" + unist-util-stringify-position@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" @@ -6610,9 +6968,9 @@ universalify@^2.0.0: integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== update-browserslist-db@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" - integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -6631,7 +6989,12 @@ use-callback-ref@^1.3.0, use-callback-ref@^1.3.3: dependencies: tslib "^2.0.0" -use-sidecar@^1.1.2: +use-debounce@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/use-debounce/-/use-debounce-10.0.4.tgz#2135be498ad855416c4495cfd8e0e130bd33bb24" + integrity sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw== + +use-sidecar@^1.1.2, use-sidecar@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== @@ -6640,9 +7003,9 @@ use-sidecar@^1.1.2: tslib "^2.0.0" use-sync-external-store@^1.2.2, use-sync-external-store@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" - integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" @@ -6674,13 +7037,13 @@ vfile@^6.0.0: vfile-message "^4.0.0" vite@^6.0.5: - version "6.0.7" - resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.7.tgz#f0f8c120733b04af52b4a1e3e7cb54eb851a799b" - integrity sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ== + version "6.2.6" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.2.6.tgz#7f0ccf2fdc0c1eda079ce258508728e2473d3f61" + integrity sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw== dependencies: - esbuild "^0.24.2" - postcss "^8.4.49" - rollup "^4.23.0" + esbuild "^0.25.0" + postcss "^8.5.3" + rollup "^4.30.1" optionalDependencies: fsevents "~2.3.3" @@ -6762,9 +7125,9 @@ yallist@^3.0.2: integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^2.3.4: - version "2.7.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + version "2.7.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6" + integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== yocto-queue@^0.1.0: version "0.1.0" @@ -6772,9 +7135,9 @@ yocto-queue@^0.1.0: integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zod@^3.20.2, zod@^3.21.4: - version "3.24.1" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee" - integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A== + version "3.24.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" + integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== zustand@^4.4.1: version "4.5.6" diff --git a/docs/.env.production b/docs/.env.production index 117c2f2..3a3a5d6 100644 --- a/docs/.env.production +++ b/docs/.env.production @@ -1 +1 @@ -VITE_BASE_PATH='/commit-docs' \ No newline at end of file +VITE_BASE_PATH='/commit-docs' diff --git a/docs/components.json b/docs/components.json index 51d59d2..275d416 100644 --- a/docs/components.json +++ b/docs/components.json @@ -18,4 +18,4 @@ "hooks": "@/hooks" }, "iconLibrary": "lucide" -} \ No newline at end of file +} diff --git a/docs/index.html b/docs/index.html index 75fa739..bfe7f8b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/docs/package.json b/docs/package.json index 3604993..661a21b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,6 +17,7 @@ "@radix-ui/react-avatar": "^1.1.2", "@radix-ui/react-dropdown-menu": "^2.1.4", "@radix-ui/react-slot": "^1.1.1", + "@radix-ui/react-tabs": "^1.1.12", "@radix-ui/react-toast": "^1.2.4", "@radix-ui/react-tooltip": "^1.1.6", "@tailwindcss/typography": "^0.5.16", @@ -24,14 +25,15 @@ "clsx": "^2.1.1", "framer-motion": "^11.18.0", "frappe-react-sdk": "^1.10.0", + "highlight.js": "^11.11.1", "jotai": "^2.11.0", "lodash": "^4.17.21", "lodash.isplainobject": "^4.0.6", "lucide-react": "^0.471.1", "moment-timezone": "^0.5.46", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-router-dom": "^7.1.2", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-router-dom": "6.3.0", "rehype-katex": "^7.0.1", "rehype-pretty-code": "^0.14.0", "rehype-raw": "^7.0.0", @@ -47,9 +49,9 @@ "timeago-react": "^3.0.6" }, "devDependencies": { - "@types/node": "^22.10.7", - "@types/react": "^18.3.18", - "@types/react-dom": "^18.3.5", + "@types/node": "20.4.2", + "@types/react": "18.2.0", + "@types/react-dom": "18.2.0", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", "eslint": "^9.17.0", diff --git a/docs/src/assets/Docs.svg b/docs/src/assets/Docs.svg index 770ed9d..7e6ca07 100644 --- a/docs/src/assets/Docs.svg +++ b/docs/src/assets/Docs.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/docs/src/assets/react.svg b/docs/src/assets/react.svg index 6c87de9..8e0e0f1 100644 --- a/docs/src/assets/react.svg +++ b/docs/src/assets/react.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/docs/src/components/common/ErrorBanner/ErrorBanner.tsx b/docs/src/components/common/ErrorBanner/ErrorBanner.tsx index bdb0eab..c446075 100644 --- a/docs/src/components/common/ErrorBanner/ErrorBanner.tsx +++ b/docs/src/components/common/ErrorBanner/ErrorBanner.tsx @@ -133,4 +133,4 @@ export const ErrorBanner = ({ error, overrideHeading, ...props }: ErrorBannerPro
) -} \ No newline at end of file +} diff --git a/docs/src/components/common/FullPageLoader/SpinnerLoader.tsx b/docs/src/components/common/FullPageLoader/SpinnerLoader.tsx index 56f000e..b083543 100644 --- a/docs/src/components/common/FullPageLoader/SpinnerLoader.tsx +++ b/docs/src/components/common/FullPageLoader/SpinnerLoader.tsx @@ -58,4 +58,4 @@ export const SpinnerLoader = ({ className, style }: SpinnerLoaderProps) => { > ) -} \ No newline at end of file +} diff --git a/docs/src/components/common/MarkdownRenderer/MDX.tsx b/docs/src/components/common/MarkdownRenderer/MDX.tsx index 1b11ee5..524963c 100644 --- a/docs/src/components/common/MarkdownRenderer/MDX.tsx +++ b/docs/src/components/common/MarkdownRenderer/MDX.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react'; import { compile, run } from '@mdx-js/mdx'; import * as runtime from 'react/jsx-runtime'; -import './markdown.css'; // Import your custom styles for markdown +import './markdown.css'; import 'katex/dist/katex.min.css'; // Plugins @@ -11,10 +11,29 @@ import remarkGfm from 'remark-gfm'; import remarkBreaks from 'remark-breaks'; import rehypeKatex from 'rehype-katex'; import rehypeSlug from 'rehype-slug'; -import rehypePrettyCode from "rehype-pretty-code"; +import rehypePrettyCode from 'rehype-pretty-code'; import CustomCodeBlock from '@/pages/features/custommdxcomponent/CustomCodeBlock'; import CustomHeading from '@/pages/features/custommdxcomponent/CustomHeading'; +// Preprocess MDX content to convert style attributes +const preprocessMDX = (mdxContent: string) => { + return mdxContent.replace(/style="([^"]*)"/g, (match, styleString) => { + const styleObject = styleString + .split(';') + .filter(Boolean) + .reduce((acc: Record, style) => { + const [key, value] = style.split(':').map((s) => s.trim()); + if (key && value) { + // Convert CSS property names to camelCase for React + const camelCaseKey = key.replace(/-([a-z])/g, (_, char) => char.toUpperCase()); + acc[camelCaseKey] = value; + } + return acc; + }, {}); + return `style={${JSON.stringify(styleObject)}}`; + }); +}; + // Custom components const CustomParagraph = ({ children }: { children?: React.ReactNode }) => { const hasParagraph = React.Children.toArray(children).some( @@ -40,7 +59,8 @@ const components = { }; const compileMDX = async (mdxContent: string) => { - const compiled = await compile(mdxContent, { + const preprocessedContent = preprocessMDX(mdxContent); // Preprocess the MDX content + const compiled = await compile(preprocessedContent, { outputFormat: 'function-body', remarkPlugins: [remarkMdx, remarkMath, remarkBreaks, remarkGfm], rehypePlugins: [rehypeSlug, rehypeKatex, rehypePrettyCode], @@ -53,8 +73,7 @@ const renderMDX = async (compiledMdx: string, customComponents: any) => { const { default: MDXContent } = await run(compiledMdx, { ...runtime }); // Wrap MDXContent with MDXProvider to use custom components - const MDXWithProvider = (props: any) => - + const MDXWithProvider = (props: any) => ; return MDXWithProvider; } catch (error) { diff --git a/docs/src/components/common/MarkdownRenderer/markdown.css b/docs/src/components/common/MarkdownRenderer/markdown.css index 6ceaff0..924cafa 100644 --- a/docs/src/components/common/MarkdownRenderer/markdown.css +++ b/docs/src/components/common/MarkdownRenderer/markdown.css @@ -1,3 +1,71 @@ +:root { + --borderColor-default: #d1d9e0; /* Light gray */ + --borderColor-muted: #d1d9e0b3; /* Muted gray */ + --fgColor-default: #1f2328; /* Dark gray for text */ + --fgColor-muted: #59636e; /* Muted gray for secondary text */ + --fgColor-accent: #0969da; /* Blue for links and accents */ + --bgColor-default: #ffffff; /* White background */ + --bgColor-muted: #f6f8fa; /* Light gray background */ + --focus-outlineColor: #0969da; /* Blue for focus outlines */ + --base-text-weight-normal: 400; /* Normal font weight */ + --base-text-weight-medium: 500; /* Medium font weight */ + --base-text-weight-semibold: 600; /* Semibold font weight */ + --base-size-4: 0.25rem; /* Spacing unit */ + --base-size-8: 0.5rem; /* Spacing unit */ + --base-size-16: 1rem; /* Spacing unit */ + --base-size-24: 1.5rem; /* Spacing unit */ + --base-size-40: 2.5rem; /* Spacing unit */ + --focus-outlineColor: #0969da; + --fgColor-default: #1f2328; + --fgColor-muted: #59636e; + --fgColor-accent: #0969da; + --fgColor-success: #1a7f37; + --fgColor-attention: #9a6700; + --fgColor-danger: #d1242f; + --fgColor-done: #8250df; + --bgColor-default: #ffffff; + --bgColor-muted: #f6f8fa; + --bgColor-neutral-muted: #818b981f; + --bgColor-attention-muted: #fff8c5; + --borderColor-default: #d1d9e0; + --borderColor-muted: #d1d9e0b3; + --borderColor-neutral-muted: #d1d9e0b3; + --borderColor-accent-emphasis: #0969da; + --borderColor-success-emphasis: #1a7f37; + --borderColor-attention-emphasis: #9a6700; + --borderColor-danger-emphasis: #cf222e; + --borderColor-done-emphasis: #8250df; + --color-prettylights-syntax-comment: #59636e; + --color-prettylights-syntax-constant: #0550ae; + --color-prettylights-syntax-constant-other-reference-link: #0a3069; + --color-prettylights-syntax-entity: #6639ba; + --color-prettylights-syntax-storage-modifier-import: #1f2328; + --color-prettylights-syntax-entity-tag: #0550ae; + --color-prettylights-syntax-keyword: #cf222e; + --color-prettylights-syntax-string: #0a3069; + --color-prettylights-syntax-variable: #953800; + --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; + --color-prettylights-syntax-brackethighlighter-angle: #59636e; + --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; + --color-prettylights-syntax-invalid-illegal-bg: #82071e; + --color-prettylights-syntax-carriage-return-text: #f6f8fa; + --color-prettylights-syntax-carriage-return-bg: #cf222e; + --color-prettylights-syntax-string-regexp: #116329; + --color-prettylights-syntax-markup-list: #3b2300; + --color-prettylights-syntax-markup-heading: #0550ae; + --color-prettylights-syntax-markup-italic: #1f2328; + --color-prettylights-syntax-markup-bold: #1f2328; + --color-prettylights-syntax-markup-deleted-text: #82071e; + --color-prettylights-syntax-markup-deleted-bg: #ffebe9; + --color-prettylights-syntax-markup-inserted-text: #116329; + --color-prettylights-syntax-markup-inserted-bg: #dafbe1; + --color-prettylights-syntax-markup-changed-text: #953800; + --color-prettylights-syntax-markup-changed-bg: #ffd8b5; + --color-prettylights-syntax-markup-ignored-text: #d1d9e0; + --color-prettylights-syntax-markup-ignored-bg: #0550ae; + --color-prettylights-syntax-meta-diff-range: #8250df; + --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98; +} .markdown-body { --base-size-4: 0.25rem; --base-size-8: 0.5rem; @@ -65,63 +133,7 @@ --color-prettylights-syntax-sublimelinter-gutter-mark: #3d444d; } } */ - @media (prefers-color-scheme: light) { - .markdown-body, [data-theme="light"] { - /* light */ - color-scheme: light; - --focus-outlineColor: #0969da; - --fgColor-default: #1f2328; - --fgColor-muted: #59636e; - --fgColor-accent: #0969da; - --fgColor-success: #1a7f37; - --fgColor-attention: #9a6700; - --fgColor-danger: #d1242f; - --fgColor-done: #8250df; - --bgColor-default: #ffffff; - --bgColor-muted: #f6f8fa; - --bgColor-neutral-muted: #818b981f; - --bgColor-attention-muted: #fff8c5; - --borderColor-default: #d1d9e0; - --borderColor-muted: #d1d9e0b3; - --borderColor-neutral-muted: #d1d9e0b3; - --borderColor-accent-emphasis: #0969da; - --borderColor-success-emphasis: #1a7f37; - --borderColor-attention-emphasis: #9a6700; - --borderColor-danger-emphasis: #cf222e; - --borderColor-done-emphasis: #8250df; - --color-prettylights-syntax-comment: #59636e; - --color-prettylights-syntax-constant: #0550ae; - --color-prettylights-syntax-constant-other-reference-link: #0a3069; - --color-prettylights-syntax-entity: #6639ba; - --color-prettylights-syntax-storage-modifier-import: #1f2328; - --color-prettylights-syntax-entity-tag: #0550ae; - --color-prettylights-syntax-keyword: #cf222e; - --color-prettylights-syntax-string: #0a3069; - --color-prettylights-syntax-variable: #953800; - --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; - --color-prettylights-syntax-brackethighlighter-angle: #59636e; - --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; - --color-prettylights-syntax-invalid-illegal-bg: #82071e; - --color-prettylights-syntax-carriage-return-text: #f6f8fa; - --color-prettylights-syntax-carriage-return-bg: #cf222e; - --color-prettylights-syntax-string-regexp: #116329; - --color-prettylights-syntax-markup-list: #3b2300; - --color-prettylights-syntax-markup-heading: #0550ae; - --color-prettylights-syntax-markup-italic: #1f2328; - --color-prettylights-syntax-markup-bold: #1f2328; - --color-prettylights-syntax-markup-deleted-text: #82071e; - --color-prettylights-syntax-markup-deleted-bg: #ffebe9; - --color-prettylights-syntax-markup-inserted-text: #116329; - --color-prettylights-syntax-markup-inserted-bg: #dafbe1; - --color-prettylights-syntax-markup-changed-text: #953800; - --color-prettylights-syntax-markup-changed-bg: #ffd8b5; - --color-prettylights-syntax-markup-ignored-text: #d1d9e0; - --color-prettylights-syntax-markup-ignored-bg: #0550ae; - --color-prettylights-syntax-meta-diff-range: #8250df; - --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98; - } - } - + .markdown-body { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; @@ -134,13 +146,13 @@ word-wrap: break-word; scroll-behavior: auto !important; } - + .markdown-body .octicon { display: inline-block; fill: currentColor; vertical-align: text-bottom; } - + .markdown-body h1:hover .anchor .octicon-link:before, .markdown-body h2:hover .anchor .octicon-link:before, .markdown-body h3:hover .anchor .octicon-link:before, @@ -155,58 +167,58 @@ -webkit-mask-image: url("data:image/svg+xml,"); mask-image: url("data:image/svg+xml,"); } - + .markdown-body details, .markdown-body figcaption, .markdown-body figure { display: block; } - + .markdown-body summary { display: list-item; } - + .markdown-body [hidden] { display: none !important; } - + .markdown-body a { background-color: transparent; color: var(--fgColor-accent); text-decoration: none; } - + .markdown-body abbr[title] { border-bottom: none; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } - + .markdown-body b, .markdown-body strong { font-weight: var(--base-text-weight-semibold, 600); } - + .markdown-body dfn { font-style: italic; } - + .markdown-body h1 { margin: .67em 0; font-weight: var(--base-text-weight-semibold, 600); padding-bottom: .3em; font-size: 2em; } - + .markdown-body mark { background-color: var(--bgColor-attention-muted); color: var(--fgColor-default); } - + .markdown-body small { font-size: 90%; } - + .markdown-body sub, .markdown-body sup { font-size: 75%; @@ -214,21 +226,21 @@ position: relative; vertical-align: baseline; } - + .markdown-body sub { bottom: -0.25em; } - + .markdown-body sup { top: -0.5em; } - + .markdown-body img { border-style: none; max-width: 100%; box-sizing: content-box; } - + .markdown-body code, .markdown-body kbd, .markdown-body pre, @@ -236,7 +248,7 @@ font-family: monospace; font-size: 1em; } - + /* .markdown-body figure { margin: 1em var(--base-size-40); } @@ -251,7 +263,7 @@ background-color: var(--borderColor-default); border: 0; } - + .markdown-body input { font: inherit; margin: 0; @@ -260,80 +272,80 @@ font-size: inherit; line-height: inherit; } - + .markdown-body [type=button], .markdown-body [type=reset], .markdown-body [type=submit] { -webkit-appearance: button; appearance: button; } - + .markdown-body [type=checkbox], .markdown-body [type=radio] { box-sizing: border-box; padding: 0; } - + .markdown-body [type=number]::-webkit-inner-spin-button, .markdown-body [type=number]::-webkit-outer-spin-button { height: auto; } - + .markdown-body [type=search]::-webkit-search-cancel-button, .markdown-body [type=search]::-webkit-search-decoration { -webkit-appearance: none; appearance: none; } - + .markdown-body ::-webkit-input-placeholder { color: inherit; opacity: .54; } - + .markdown-body ::-webkit-file-upload-button { -webkit-appearance: button; appearance: button; font: inherit; } - + .markdown-body a:hover { text-decoration: underline; } - + .markdown-body ::placeholder { color: var(--fgColor-muted); opacity: 1; } - + .markdown-body hr::before { display: table; content: ""; } - + .markdown-body hr::after { display: table; clear: both; content: ""; } - + .markdown-body table { border-spacing: 0; border-collapse: collapse; display: block; - width: max-content; + /* width: max-content; */ max-width: 100%; overflow: auto; } - + .markdown-body td, .markdown-body th { padding: 0; } - + .markdown-body details summary { cursor: pointer; } - + .markdown-body a:focus, .markdown-body [role=button]:focus, .markdown-body input[type=radio]:focus, @@ -342,14 +354,14 @@ outline-offset: -2px; box-shadow: none; } - + .markdown-body a:focus:not(:focus-visible), .markdown-body [role=button]:focus:not(:focus-visible), .markdown-body input[type=radio]:focus:not(:focus-visible), .markdown-body input[type=checkbox]:focus:not(:focus-visible) { outline: solid 1px transparent; } - + .markdown-body a:focus-visible, .markdown-body [role=button]:focus-visible, .markdown-body input[type=radio]:focus-visible, @@ -358,7 +370,7 @@ outline-offset: -2px; box-shadow: none; } - + .markdown-body a:not([class]):focus, .markdown-body a:not([class]):focus-visible, .markdown-body input[type=radio]:focus, @@ -367,7 +379,7 @@ .markdown-body input[type=checkbox]:focus-visible { outline-offset: 0; } - + .markdown-body kbd { display: inline-block; padding: var(--base-size-4); @@ -381,7 +393,7 @@ border-radius: 6px; box-shadow: inset 0 -1px 0 var(--borderColor-neutral-muted); } - + .markdown-body h1, .markdown-body h2, .markdown-body h3, @@ -393,77 +405,77 @@ font-weight: var(--base-text-weight-semibold, 600); line-height: 1.25; } - + .markdown-body h2 { font-weight: var(--base-text-weight-semibold, 600); padding-bottom: .3em; font-size: 1.5em; } - + .markdown-body h3 { font-weight: var(--base-text-weight-semibold, 600); font-size: 1.25em; } - + .markdown-body h4 { font-weight: var(--base-text-weight-semibold, 600); font-size: 1em; } - + .markdown-body h5 { font-weight: var(--base-text-weight-semibold, 600); font-size: .875em; } - + .markdown-body h6 { font-weight: var(--base-text-weight-semibold, 600); font-size: .85em; color: var(--fgColor-muted); } - + .markdown-body p { margin-top: 0; margin-bottom: 10px; } - + .markdown-body blockquote { margin: 0; padding: 0 1em; color: var(--fgColor-muted); border-left: .25em solid var(--borderColor-default); } - + .markdown-body ul, .markdown-body ol { margin-top: 0; margin-bottom: 0; padding-left: 2em; } - + .markdown-body ol ol, .markdown-body ul ol { list-style-type: lower-roman; } - + .markdown-body ul ul ol, .markdown-body ul ol ol, .markdown-body ol ul ol, .markdown-body ol ol ol { list-style-type: lower-alpha; } - + .markdown-body dd { margin-left: 0; } - + .markdown-body tt, .markdown-body code, .markdown-body samp { font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace); font-size: 12px; } - + .markdown-body pre { margin-top: 0; margin-bottom: 0; @@ -471,64 +483,64 @@ font-size: 12px; word-wrap: normal; } - + .markdown-body .octicon { display: inline-block; overflow: visible !important; vertical-align: text-bottom; fill: currentColor; } - + .markdown-body input::-webkit-outer-spin-button, .markdown-body input::-webkit-inner-spin-button { margin: 0; -webkit-appearance: none; appearance: none; } - + .markdown-body .mr-2 { margin-right: var(--base-size-8, 8px) !important; } - + .markdown-body::before { display: table; content: ""; } - + .markdown-body::after { display: table; clear: both; content: ""; } - + .markdown-body>*:first-child { margin-top: 0 !important; } - + .markdown-body>*:last-child { margin-bottom: 0 !important; } - + .markdown-body a:not([href]) { color: inherit; text-decoration: none; } - + .markdown-body .absent { color: var(--fgColor-danger); } - + .markdown-body .anchor { float: left; padding-right: var(--base-size-4); margin-left: -20px; line-height: 1; } - + .markdown-body .anchor:focus { outline: none; } - + .markdown-body p, .markdown-body blockquote, .markdown-body ul, @@ -540,15 +552,15 @@ margin-top: 0; margin-bottom: var(--base-size-16); } - + .markdown-body blockquote>:first-child { margin-top: 0; } - + .markdown-body blockquote>:last-child { margin-bottom: 0; } - + .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, @@ -559,7 +571,7 @@ vertical-align: middle; visibility: hidden; } - + .markdown-body h1:hover .anchor, .markdown-body h2:hover .anchor, .markdown-body h3:hover .anchor, @@ -568,7 +580,7 @@ .markdown-body h6:hover .anchor { text-decoration: none; } - + .markdown-body h1:hover .anchor .octicon-link, .markdown-body h2:hover .anchor .octicon-link, .markdown-body h3:hover .anchor .octicon-link, @@ -577,7 +589,7 @@ .markdown-body h6:hover .anchor .octicon-link { visibility: visible; } - + .markdown-body h1 tt, .markdown-body h1 code, .markdown-body h2 tt, @@ -593,7 +605,7 @@ padding: 0 .2em; font-size: inherit; } - + .markdown-body summary h1, .markdown-body summary h2, .markdown-body summary h3, @@ -602,7 +614,7 @@ .markdown-body summary h6 { display: inline-block; } - + .markdown-body summary h1 .anchor, .markdown-body summary h2 .anchor, .markdown-body summary h3 .anchor, @@ -611,43 +623,43 @@ .markdown-body summary h6 .anchor { margin-left: -40px; } - + .markdown-body summary h1, .markdown-body summary h2 { padding-bottom: 0; border-bottom: 0; } - + .markdown-body ul.no-list, .markdown-body ol.no-list { padding: 0; list-style-type: none; } - + .markdown-body ol[type="a s"] { list-style-type: lower-alpha; } - + .markdown-body ol[type="A s"] { list-style-type: upper-alpha; } - + .markdown-body ol[type="i s"] { list-style-type: lower-roman; } - + .markdown-body ol[type="I s"] { list-style-type: upper-roman; } - + .markdown-body ol[type="1"] { list-style-type: decimal; } - + .markdown-body div>ol:not([type]) { list-style-type: decimal; } - + .markdown-body ul ul, .markdown-body ul ol, .markdown-body ol ol, @@ -655,19 +667,19 @@ margin-top: 0; margin-bottom: 0; } - + .markdown-body li>p { margin-top: var(--base-size-16); } - + .markdown-body li+li { margin-top: .25em; } - + .markdown-body dl { padding: 0; } - + .markdown-body dl dt { padding: 0; margin-top: var(--base-size-16); @@ -675,58 +687,64 @@ font-style: italic; font-weight: var(--base-text-weight-semibold, 600); } - + .markdown-body dl dd { padding: 0 var(--base-size-16); margin-bottom: var(--base-size-16); } - + .markdown-body table th { font-weight: var(--base-text-weight-semibold, 600); } - + .markdown-body table th, .markdown-body table td { - padding: 6px 13px; - border: 1px solid var(--borderColor-default); + border: 1px solid var(--borderColor-default, #d1d9e0); /* Add fallback */ + padding: 6px 13px; /* Ensure padding is applied */ + } + + .markdown-body table { + border-spacing: 0; /* Remove spacing between cells */ + border-collapse: collapse; /* Ensure borders collapse */ + width: 100%; /* Ensure table takes full width */ } - + .markdown-body table td>:last-child { margin-bottom: 0; } - + .markdown-body table tr { background-color: var(--bgColor-default); border-top: 1px solid var(--borderColor-muted); } - + .markdown-body table tr:nth-child(2n) { background-color: var(--bgColor-muted); } - + .markdown-body table img { background-color: transparent; } - + .markdown-body img[align=right] { padding-left: 20px; } - + .markdown-body img[align=left] { padding-right: 20px; } - + .markdown-body .emoji { max-width: none; vertical-align: text-top; background-color: transparent; } - + .markdown-body span.frame { display: block; overflow: hidden; } - + .markdown-body span.frame>span { display: block; float: left; @@ -736,80 +754,80 @@ overflow: hidden; border: 1px solid var(--borderColor-default); } - + .markdown-body span.frame span img { display: block; float: left; } - + .markdown-body span.frame span span { display: block; padding: 5px 0 0; clear: both; color: var(--fgColor-default); } - + .markdown-body span.align-center { display: block; overflow: hidden; clear: both; } - + .markdown-body span.align-center>span { display: block; margin: 13px auto 0; overflow: hidden; text-align: center; } - + .markdown-body span.align-center span img { margin: 0 auto; text-align: center; } - + .markdown-body span.align-right { display: block; overflow: hidden; clear: both; } - + .markdown-body span.align-right>span { display: block; margin: 13px 0 0; overflow: hidden; text-align: right; } - + .markdown-body span.align-right span img { margin: 0; text-align: right; } - + .markdown-body span.float-left { display: block; float: left; margin-right: 13px; overflow: hidden; } - + .markdown-body span.float-left span { margin: 13px 0 0; } - + .markdown-body span.float-right { display: block; float: right; margin-left: 13px; overflow: hidden; } - + .markdown-body span.float-right>span { display: block; margin: 13px auto 0; overflow: hidden; text-align: right; } - + .markdown-body code, .markdown-body tt { padding: .2em .4em; @@ -819,24 +837,24 @@ background-color: var(--bgColor-neutral-muted); border-radius: 6px; } - + .markdown-body code br, .markdown-body tt br { display: none; } - + .markdown-body del code { text-decoration: inherit; } - - .markdown-body samp { + + .markdown-body samp { font-size: 85%; } - + .markdown-body pre code { font-size: 100%; } - + .markdown-body pre>code { padding: 4px; margin: 0; @@ -845,16 +863,16 @@ background: transparent; border: 0; } - + .markdown-body .highlight { margin-bottom: var(--base-size-16); } - + .markdown-body .highlight pre { margin-bottom: 0; word-break: normal; } - + .markdown-body .highlight pre, .markdown-body pre { padding: var(--base-size-16); @@ -865,7 +883,7 @@ background-color: var(--bgColor-muted); border-radius: 6px; } - + .markdown-body pre code, .markdown-body pre tt { display: inline; @@ -878,7 +896,7 @@ background-color: transparent; border: 0; } - + .markdown-body .csv-data td, .markdown-body .csv-data th { padding: 5px; @@ -888,52 +906,52 @@ text-align: left; white-space: nowrap; } - + .markdown-body .csv-data .blob-num { padding: 10px var(--base-size-8) 9px; text-align: right; background: var(--bgColor-default); border: 0; } - + .markdown-body .csv-data tr { border-top: 0; } - + .markdown-body .csv-data th { font-weight: var(--base-text-weight-semibold, 600); background: var(--bgColor-muted); border-top: 0; } - + .markdown-body [data-footnote-ref]::before { content: "["; } - + .markdown-body [data-footnote-ref]::after { content: "]"; } - + .markdown-body .footnotes { font-size: 12px; color: var(--fgColor-muted); border-top: 1px solid var(--borderColor-default); } - + .markdown-body .footnotes ol { padding-left: var(--base-size-16); } - + .markdown-body .footnotes ol ul { display: inline-block; padding-left: var(--base-size-16); margin-top: var(--base-size-16); } - + .markdown-body .footnotes li { position: relative; } - + .markdown-body .footnotes li:target::before { position: absolute; top: calc(var(--base-size-8)*-1); @@ -945,42 +963,42 @@ border: 2px solid var(--borderColor-accent-emphasis); border-radius: 6px; } - + .markdown-body .footnotes li:target { color: var(--fgColor-default); } - + .markdown-body .footnotes .data-footnote-backref g-emoji { font-family: monospace; } - + .markdown-body .pl-c { color: var(--color-prettylights-syntax-comment); } - + .markdown-body .pl-c1, .markdown-body .pl-s .pl-v { color: var(--color-prettylights-syntax-constant); } - + .markdown-body .pl-e, .markdown-body .pl-en { color: var(--color-prettylights-syntax-entity); } - + .markdown-body .pl-smi, .markdown-body .pl-s .pl-s1 { color: var(--color-prettylights-syntax-storage-modifier-import); } - + .markdown-body .pl-ent { color: var(--color-prettylights-syntax-entity-tag); } - + .markdown-body .pl-k { color: var(--color-prettylights-syntax-keyword); } - + .markdown-body .pl-s, .markdown-body .pl-pds, .markdown-body .pl-s .pl-pse .pl-s1, @@ -990,90 +1008,90 @@ .markdown-body .pl-sr .pl-sra { color: var(--color-prettylights-syntax-string); } - + .markdown-body .pl-v, .markdown-body .pl-smw { color: var(--color-prettylights-syntax-variable); } - + .markdown-body .pl-bu { color: var(--color-prettylights-syntax-brackethighlighter-unmatched); } - + .markdown-body .pl-ii { color: var(--color-prettylights-syntax-invalid-illegal-text); background-color: var(--color-prettylights-syntax-invalid-illegal-bg); } - + .markdown-body .pl-c2 { color: var(--color-prettylights-syntax-carriage-return-text); background-color: var(--color-prettylights-syntax-carriage-return-bg); } - + .markdown-body .pl-sr .pl-cce { font-weight: bold; color: var(--color-prettylights-syntax-string-regexp); } - + .markdown-body .pl-ml { color: var(--color-prettylights-syntax-markup-list); } - + .markdown-body .pl-mh, .markdown-body .pl-mh .pl-en, .markdown-body .pl-ms { font-weight: bold; color: var(--color-prettylights-syntax-markup-heading); } - + .markdown-body .pl-mi { font-style: italic; color: var(--color-prettylights-syntax-markup-italic); } - + .markdown-body .pl-mb { font-weight: bold; color: var(--color-prettylights-syntax-markup-bold); } - + .markdown-body .pl-md { color: var(--color-prettylights-syntax-markup-deleted-text); background-color: var(--color-prettylights-syntax-markup-deleted-bg); } - + .markdown-body .pl-mi1 { color: var(--color-prettylights-syntax-markup-inserted-text); background-color: var(--color-prettylights-syntax-markup-inserted-bg); } - + .markdown-body .pl-mc { color: var(--color-prettylights-syntax-markup-changed-text); background-color: var(--color-prettylights-syntax-markup-changed-bg); } - + .markdown-body .pl-mi2 { color: var(--color-prettylights-syntax-markup-ignored-text); background-color: var(--color-prettylights-syntax-markup-ignored-bg); } - + .markdown-body .pl-mdr { font-weight: bold; color: var(--color-prettylights-syntax-meta-diff-range); } - + .markdown-body .pl-ba { color: var(--color-prettylights-syntax-brackethighlighter-angle); } - + .markdown-body .pl-sg { color: var(--color-prettylights-syntax-sublimelinter-gutter-mark); } - + .markdown-body .pl-corl { text-decoration: underline; color: var(--color-prettylights-syntax-constant-other-reference-link); } - + .markdown-body [role=button]:focus:not(:focus-visible), .markdown-body [role=tabpanel][tabindex="0"]:focus:not(:focus-visible), .markdown-body button:focus:not(:focus-visible), @@ -1082,12 +1100,12 @@ outline: none; box-shadow: none; } - + .markdown-body [tabindex="0"]:focus:not(:focus-visible), .markdown-body details-dialog:focus:not(:focus-visible) { outline: none; } - + .markdown-body g-emoji { display: inline-block; min-width: 1ch; @@ -1098,45 +1116,45 @@ line-height: 1; vertical-align: -0.075em; } - + .markdown-body g-emoji img { width: 1em; height: 1em; } - + .markdown-body .task-list-item { list-style-type: none; } - + .markdown-body .task-list-item label { font-weight: var(--base-text-weight-normal, 400); } - + .markdown-body .task-list-item.enabled label { cursor: pointer; } - + .markdown-body .task-list-item+.task-list-item { margin-top: var(--base-size-4); } - + .markdown-body .task-list-item .handle { display: none; } - + .markdown-body .task-list-item-checkbox { margin: 0 .2em .25em -1.4em; vertical-align: middle; } - + .markdown-body ul:dir(rtl) .task-list-item-checkbox { margin: 0 -1.6em .25em .2em; } - + .markdown-body ol:dir(rtl) .task-list-item-checkbox { margin: 0 -1.6em .25em .2em; } - + .markdown-body .contains-task-list:hover .task-list-item-convert-container, .markdown-body .contains-task-list:focus-within .task-list-item-convert-container { display: block; @@ -1145,73 +1163,73 @@ overflow: visible; clip: auto; } - + .markdown-body ::-webkit-calendar-picker-indicator { filter: invert(50%); } - + .markdown-body .markdown-alert { padding: var(--base-size-8) var(--base-size-16); margin-bottom: var(--base-size-16); color: inherit; border-left: .25em solid var(--borderColor-default); } - + .markdown-body .markdown-alert>:first-child { margin-top: 0; } - + .markdown-body .markdown-alert>:last-child { margin-bottom: 0; } - + .markdown-body .markdown-alert .markdown-alert-title { display: flex; font-weight: var(--base-text-weight-medium, 500); align-items: center; line-height: 1; } - + .markdown-body .markdown-alert.markdown-alert-note { border-left-color: var(--borderColor-accent-emphasis); } - + .markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title { color: var(--fgColor-accent); } - + .markdown-body .markdown-alert.markdown-alert-important { border-left-color: var(--borderColor-done-emphasis); } - + .markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title { color: var(--fgColor-done); } - + .markdown-body .markdown-alert.markdown-alert-warning { border-left-color: var(--borderColor-attention-emphasis); } - + .markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title { color: var(--fgColor-attention); } - + .markdown-body .markdown-alert.markdown-alert-tip { border-left-color: var(--borderColor-success-emphasis); } - + .markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title { color: var(--fgColor-success); } - + .markdown-body .markdown-alert.markdown-alert-caution { border-left-color: var(--borderColor-danger-emphasis); } - + .markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title { color: var(--fgColor-danger); } - + .markdown-body>*:first-child>.heading-element:first-child { margin-top: 0 !important; } @@ -1233,4 +1251,4 @@ .markdown-body li { margin-bottom: 0.5em; /* Add margin to the bottom of list items */ -} \ No newline at end of file +} diff --git a/docs/src/components/common/PageNotFound/PageNotFound.tsx b/docs/src/components/common/PageNotFound/PageNotFound.tsx index 2e097d5..e9bffc8 100644 --- a/docs/src/components/common/PageNotFound/PageNotFound.tsx +++ b/docs/src/components/common/PageNotFound/PageNotFound.tsx @@ -55,4 +55,4 @@ const PageNotFound = () => { ); } -export default PageNotFound; \ No newline at end of file +export default PageNotFound; diff --git a/docs/src/components/ui/tabs.tsx b/docs/src/components/ui/tabs.tsx new file mode 100644 index 0000000..85d83be --- /dev/null +++ b/docs/src/components/ui/tabs.tsx @@ -0,0 +1,53 @@ +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "@/lib/utils" + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/docs/src/config/socket.ts b/docs/src/config/socket.ts index ec0b589..226a66f 100644 --- a/docs/src/config/socket.ts +++ b/docs/src/config/socket.ts @@ -2,4 +2,4 @@ const host = window.location.hostname; const web_port = window.location.port ? `:${window.location.port}` : ''; const protocol = web_port ? 'http' : 'https'; -export const web_url = `${protocol}://${host}${web_port}`; \ No newline at end of file +export const web_url = `${protocol}://${host}${web_port}`; diff --git a/docs/src/hooks/useDebounce.ts b/docs/src/hooks/useDebounce.ts index a26a73c..cb626ec 100644 --- a/docs/src/hooks/useDebounce.ts +++ b/docs/src/hooks/useDebounce.ts @@ -21,4 +21,4 @@ export const useDebounce = (value: T, delay = 200): T => { }, [value, delay]); return debouncedValue; -} \ No newline at end of file +} diff --git a/docs/src/hooks/useGetCommitDocsDetails.ts b/docs/src/hooks/useGetCommitDocsDetails.ts index cb79be9..84d51f1 100644 --- a/docs/src/hooks/useGetCommitDocsDetails.ts +++ b/docs/src/hooks/useGetCommitDocsDetails.ts @@ -32,4 +32,4 @@ export const useGetCommitDocsDetails = (ID: string) => { const data = bootCommitDocsDetails || apiCommitDocsDetails?.message; return { data, error, isLoading }; -}; \ No newline at end of file +}; diff --git a/docs/src/hooks/useGetDoctypeMeta.ts b/docs/src/hooks/useGetDoctypeMeta.ts index 73598ed..115fd24 100644 --- a/docs/src/hooks/useGetDoctypeMeta.ts +++ b/docs/src/hooks/useGetDoctypeMeta.ts @@ -91,10 +91,10 @@ export const useDoctypeForField = () => { return hasField } /** - * - * @param doctype + * + * @param doctype * @param fieldname - * return promise that resolves to the doctype of the field + * return promise that resolves to the doctype of the field */ const getDoctypeForField = (doctype: string, fieldname: string) => { /** @@ -146,4 +146,4 @@ export const useDoctypeForField = () => { } return getDoctypeForField -} \ No newline at end of file +} diff --git a/docs/src/hooks/useGetInstalledApp.ts b/docs/src/hooks/useGetInstalledApp.ts index b3a7fc6..ef443c1 100644 --- a/docs/src/hooks/useGetInstalledApp.ts +++ b/docs/src/hooks/useGetInstalledApp.ts @@ -40,4 +40,4 @@ export const useInstalledApps = () => { error, isLoading: isLoading && !bootInstalledApps }; -}; \ No newline at end of file +}; diff --git a/docs/src/index.css b/docs/src/index.css index 626ec9e..c732be7 100644 --- a/docs/src/index.css +++ b/docs/src/index.css @@ -3,93 +3,93 @@ @tailwind base; @tailwind components; @tailwind utilities; - + @layer base { :root { --background: 0 0% 100%; --foreground: 240 10% 3.9%; - + --muted: 240 4.8% 95.9%; --muted-foreground: 240 3.8% 46.1%; - + --popover: 0 0% 100%; --popover-foreground: 240 10% 3.9%; - + --card: 0 0% 100%; --card-foreground: 240 10% 3.9%; - + --border: 240 5.9% 90%; --input: 240 5.9% 90%; - + --primary: 240 5.9% 10%; --primary-foreground: 0 0% 98%; - + --secondary: 240 4.8% 95.9%; --secondary-foreground: 240 5.9% 10%; - + --accent: 240 4.8% 95.9%; --accent-foreground: 240 5.9% 10%; - + --destructive: 0 84.2% 60.2%; --destructive-foreground: 0 0% 98%; - + --ring: 240 10% 3.9%; - + --radius: 0.5rem; - + --chart-1: 12 76% 61%; - + --chart-2: 173 58% 39%; - + --chart-3: 197 37% 24%; - + --chart-4: 43 74% 66%; - + --chart-5: 27 87% 67%; } - + .dark { --background: 240 10% 3.9%; --foreground: 0 0% 98%; - + --muted: 240 3.7% 15.9%; --muted-foreground: 240 5% 64.9%; - + --popover: 240 10% 3.9%; --popover-foreground: 0 0% 98%; - + --card: 240 10% 3.9%; --card-foreground: 0 0% 98%; - + --border: 240 3.7% 15.9%; --input: 240 3.7% 15.9%; - + --primary: 0 0% 98%; --primary-foreground: 240 5.9% 10%; - + --secondary: 240 3.7% 15.9%; --secondary-foreground: 0 0% 98%; - + --accent: 240 3.7% 15.9%; --accent-foreground: 0 0% 98%; - + --destructive: 0 62.8% 30.6%; --destructive-foreground: 0 0% 98%; - + --ring: 240 4.9% 83.9%; - + --chart-1: 220 70% 50%; - + --chart-2: 160 60% 45%; - + --chart-3: 30 80% 55%; - + --chart-4: 280 65% 60%; - + --chart-5: 340 75% 55%; } } - + @layer base { * { @apply border-border; @@ -97,4 +97,4 @@ body { @apply bg-background text-foreground; } -} \ No newline at end of file +} diff --git a/docs/src/pages/features/LandingPage/DocsList.tsx b/docs/src/pages/features/LandingPage/DocsList.tsx index 39588c4..d905661 100644 --- a/docs/src/pages/features/LandingPage/DocsList.tsx +++ b/docs/src/pages/features/LandingPage/DocsList.tsx @@ -53,4 +53,4 @@ const DocCard = ({ data }: { data: CommitDocs }) => { ) -} \ No newline at end of file +} diff --git a/docs/src/pages/features/LandingPage/HeroSection.tsx b/docs/src/pages/features/LandingPage/HeroSection.tsx index 434aa74..c65131c 100644 --- a/docs/src/pages/features/LandingPage/HeroSection.tsx +++ b/docs/src/pages/features/LandingPage/HeroSection.tsx @@ -27,4 +27,4 @@ const HeroSection = () => { ) } -export default HeroSection \ No newline at end of file +export default HeroSection diff --git a/docs/src/pages/features/LandingPage/useGetCommitDocsDetails.ts b/docs/src/pages/features/LandingPage/useGetCommitDocsDetails.ts index 1bf9279..bd572a0 100644 --- a/docs/src/pages/features/LandingPage/useGetCommitDocsDetails.ts +++ b/docs/src/pages/features/LandingPage/useGetCommitDocsDetails.ts @@ -63,4 +63,4 @@ export const useGetCommitDocsList = () => { const data = bootCommitDocsList || apiCommitDocsList?.message; return { data, error, isLoading }; -}; \ No newline at end of file +}; diff --git a/docs/src/pages/features/custommdxcomponent/CustomCodeBlock.tsx b/docs/src/pages/features/custommdxcomponent/CustomCodeBlock.tsx index 78ca7d6..f81a6d9 100644 --- a/docs/src/pages/features/custommdxcomponent/CustomCodeBlock.tsx +++ b/docs/src/pages/features/custommdxcomponent/CustomCodeBlock.tsx @@ -49,4 +49,3 @@ const CustomCodeBlock = ({ children, ...props }: { children: React.ReactNode, pr }; export default CustomCodeBlock; - diff --git a/docs/src/pages/features/custommdxcomponent/CustomHeading.tsx b/docs/src/pages/features/custommdxcomponent/CustomHeading.tsx index 82e3f66..a107d57 100644 --- a/docs/src/pages/features/custommdxcomponent/CustomHeading.tsx +++ b/docs/src/pages/features/custommdxcomponent/CustomHeading.tsx @@ -59,4 +59,4 @@ const CustomHeading = ({ id, children, as }: { id: string, children: React.React ); }; -export default CustomHeading; \ No newline at end of file +export default CustomHeading; diff --git a/docs/src/pages/features/docs/DocsPage.tsx b/docs/src/pages/features/docs/DocsPage.tsx index ecd4105..f25776e 100644 --- a/docs/src/pages/features/docs/DocsPage.tsx +++ b/docs/src/pages/features/docs/DocsPage.tsx @@ -41,4 +41,4 @@ export const NavigateToFirstPage = ({ ID }: { ID: string }) => { } -export default DocsPage \ No newline at end of file +export default DocsPage diff --git a/docs/src/pages/features/docs/Footer.tsx b/docs/src/pages/features/docs/Footer.tsx index 32052e0..02cb498 100644 --- a/docs/src/pages/features/docs/Footer.tsx +++ b/docs/src/pages/features/docs/Footer.tsx @@ -27,7 +27,7 @@ export const Footer = ({ ID }: { ID: string }) => {
{commit_docs.light_mode_logo && ( - Logo + Logo )} {commit_docs.header && (

{commit_docs.header}

@@ -163,4 +163,4 @@ const FooterSkeleton = () => {
); -}; \ No newline at end of file +}; diff --git a/docs/src/pages/features/docs/PageContent.tsx b/docs/src/pages/features/docs/PageContent.tsx index 362dc6d..cd49f9a 100644 --- a/docs/src/pages/features/docs/PageContent.tsx +++ b/docs/src/pages/features/docs/PageContent.tsx @@ -51,6 +51,7 @@ const PageContent = () => { ) } + return null } -export default PageContent \ No newline at end of file +export default PageContent diff --git a/docs/src/pages/features/docs/Renderer.tsx b/docs/src/pages/features/docs/Renderer.tsx index 85288dd..d3ad6db 100644 --- a/docs/src/pages/features/docs/Renderer.tsx +++ b/docs/src/pages/features/docs/Renderer.tsx @@ -1,5 +1,4 @@ -import { Button } from "@/components/ui/button"; -import { ThumbsUp, ThumbsDown, ChevronLeft, ChevronRight } from "lucide-react"; +import { ChevronLeft, ChevronRight } from "lucide-react"; import { useParams } from "react-router-dom"; import { DocsSidebarItem } from "./docs"; import { PageData } from "./PageContent"; @@ -27,7 +26,7 @@ export const Renderer = ({ data }: { data: PageData }) => {
{/* Feedback Section */} -
+ {/*
Was this page helpful? @@ -47,7 +46,7 @@ export const Renderer = ({ data }: { data: PageData }) => { No
-
+
*/}
{/* Navigation Section */}
@@ -120,4 +119,4 @@ const findNextPrev = (docs: NestedDocs, route: string) => { const prev = flatDocs[index - 1] || null; return { next, prev }; -}; \ No newline at end of file +}; diff --git a/docs/src/pages/features/docs/Sidebar.tsx b/docs/src/pages/features/docs/Sidebar.tsx index 4c29b52..1b5604d 100644 --- a/docs/src/pages/features/docs/Sidebar.tsx +++ b/docs/src/pages/features/docs/Sidebar.tsx @@ -20,9 +20,9 @@ export const Sidebar = ({ ID }: { ID: string }) => {
{/* Header */} -
+
{commit_docs.light_mode_logo && ( - logo + logo )} {commit_docs.header &&
{commit_docs.header}
} {commit_docs.published == 0 && ( @@ -47,6 +47,7 @@ export const Sidebar = ({ ID }: { ID: string }) => { if (isLoading) { return ; } + return null }; const SidebarGroup = ({ groupName, items }: { groupName: string, items: DocsSidebarItem[] }) => { @@ -235,4 +236,4 @@ const SidebarSkeleton = () => {
); -}; \ No newline at end of file +}; diff --git a/docs/src/pages/features/docs/ViewDocs.tsx b/docs/src/pages/features/docs/ViewDocs.tsx index 46dcd1c..b326d73 100644 --- a/docs/src/pages/features/docs/ViewDocs.tsx +++ b/docs/src/pages/features/docs/ViewDocs.tsx @@ -39,4 +39,4 @@ const ViewDocsDetails = ({ ID }: { ID: string }) => { // } }; -export default ViewDocs; \ No newline at end of file +export default ViewDocs; diff --git a/docs/src/types/APIData.ts b/docs/src/types/APIData.ts index 2db8f75..5ca9831 100644 --- a/docs/src/types/APIData.ts +++ b/docs/src/types/APIData.ts @@ -25,4 +25,4 @@ export interface Argument { argument: string type: string default: string -} \ No newline at end of file +} diff --git a/docs/src/types/CommitProjectBranch.ts b/docs/src/types/CommitProjectBranch.ts index 2deb7e4..997e286 100644 --- a/docs/src/types/CommitProjectBranch.ts +++ b/docs/src/types/CommitProjectBranch.ts @@ -22,4 +22,4 @@ export interface ModuleDataValue { } export interface AppModuleData { [key: string]: ModuleData -} \ No newline at end of file +} diff --git a/docs/src/types/Core/DocField.ts b/docs/src/types/Core/DocField.ts index e185624..fd1ec02 100644 --- a/docs/src/types/Core/DocField.ts +++ b/docs/src/types/Core/DocField.ts @@ -115,4 +115,4 @@ For Select, enter list of Options, each on a new line. */ oldfieldname?: string /** : Data */ oldfieldtype?: string -} \ No newline at end of file +} diff --git a/docs/src/types/Core/DocPerm.ts b/docs/src/types/Core/DocPerm.ts index 0ec6e9c..a2bb531 100644 --- a/docs/src/types/Core/DocPerm.ts +++ b/docs/src/types/Core/DocPerm.ts @@ -44,4 +44,4 @@ export interface DocPerm{ print?: 0 | 1 /** Email : Check */ email?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/Core/DocType.ts b/docs/src/types/Core/DocType.ts index b9abcd9..349c015 100644 --- a/docs/src/types/Core/DocType.ts +++ b/docs/src/types/Core/DocType.ts @@ -147,4 +147,4 @@ export interface DocType { migration_hash?: string /** Fields : Table - DocField */ fields?: DocField[] -} \ No newline at end of file +} diff --git a/docs/src/types/Core/DocTypeAction.ts b/docs/src/types/Core/DocTypeAction.ts index 9dea315..bd862f7 100644 --- a/docs/src/types/Core/DocTypeAction.ts +++ b/docs/src/types/Core/DocTypeAction.ts @@ -22,4 +22,4 @@ export interface DocTypeAction{ hidden?: 0 | 1 /** Custom : Check */ custom?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/Core/DocTypeLink.ts b/docs/src/types/Core/DocTypeLink.ts index 2b9fc8c..096f24e 100644 --- a/docs/src/types/Core/DocTypeLink.ts +++ b/docs/src/types/Core/DocTypeLink.ts @@ -26,4 +26,4 @@ export interface DocTypeLink{ is_child_table?: 0 | 1 /** Custom : Check */ custom?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/Core/DocTypeState.ts b/docs/src/types/Core/DocTypeState.ts index 575a9c9..a3c3e25 100644 --- a/docs/src/types/Core/DocTypeState.ts +++ b/docs/src/types/Core/DocTypeState.ts @@ -16,4 +16,4 @@ export interface DocTypeState{ color: "Blue" | "Cyan" | "Gray" | "Green" | "Light Blue" | "Orange" | "Pink" | "Purple" | "Red" | "Yellow" /** Custom : Check */ custom?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/Core/File.ts b/docs/src/types/Core/File.ts index 11ff26d..2b87a6c 100644 --- a/docs/src/types/Core/File.ts +++ b/docs/src/types/Core/File.ts @@ -46,4 +46,4 @@ export interface File{ uploaded_to_dropbox?: 0 | 1 /** Uploaded To Google Drive : Check */ uploaded_to_google_drive?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/Integrations/OAuthScope.ts b/docs/src/types/Integrations/OAuthScope.ts index 1b1c48f..a95b5cc 100644 --- a/docs/src/types/Integrations/OAuthScope.ts +++ b/docs/src/types/Integrations/OAuthScope.ts @@ -12,4 +12,4 @@ export interface OAuthScope{ idx?: number /** Scope : Data */ scope?: string -} \ No newline at end of file +} diff --git a/docs/src/types/Table.ts b/docs/src/types/Table.ts index 83844c7..9f8d6a9 100644 --- a/docs/src/types/Table.ts +++ b/docs/src/types/Table.ts @@ -44,4 +44,4 @@ export type PostgresRelationship = { source_column_name: string, target_table_name: string, target_column_name: string, -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitBranchDocumentation.ts b/docs/src/types/commit/CommitBranchDocumentation.ts index 97ec464..f2ef1a8 100644 --- a/docs/src/types/commit/CommitBranchDocumentation.ts +++ b/docs/src/types/commit/CommitBranchDocumentation.ts @@ -14,4 +14,4 @@ export interface CommitBranchDocumentation{ app: string /** Documentation : JSON */ documentation?: any -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitDocs.ts b/docs/src/types/commit/CommitDocs.ts index a1bbd40..2ad066d 100644 --- a/docs/src/types/commit/CommitDocs.ts +++ b/docs/src/types/commit/CommitDocs.ts @@ -46,4 +46,4 @@ export interface CommitDocs{ /** Footer : Table - Commit Docs Footer Item */ footer?: CommitDocsFooterItem[] description?: string -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitDocsFooterItem.ts b/docs/src/types/commit/CommitDocsFooterItem.ts index f047f56..4d9ad28 100644 --- a/docs/src/types/commit/CommitDocsFooterItem.ts +++ b/docs/src/types/commit/CommitDocsFooterItem.ts @@ -18,4 +18,4 @@ export interface CommitDocsFooterItem{ url: string /** Hide on Footer : Check */ hide_on_footer?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitDocsGroupItem.ts b/docs/src/types/commit/CommitDocsGroupItem.ts index 757f0a3..84f95f0 100644 --- a/docs/src/types/commit/CommitDocsGroupItem.ts +++ b/docs/src/types/commit/CommitDocsGroupItem.ts @@ -16,4 +16,4 @@ export interface CommitDocsGroupItem{ docs_page: string /** Hide on Sidebar : Check */ hide_on_sidebar?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitDocsPage.ts b/docs/src/types/commit/CommitDocsPage.ts index 9b3f570..c6a702d 100644 --- a/docs/src/types/commit/CommitDocsPage.ts +++ b/docs/src/types/commit/CommitDocsPage.ts @@ -34,4 +34,4 @@ export interface CommitDocsPage{ content?: string /** Linked Pages : Table - Linked Commit Docs Page */ linked_pages?: LinkedCommitDocsPage[] -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitDocsTopbarItem.ts b/docs/src/types/commit/CommitDocsTopbarItem.ts index edc26bf..77669a9 100644 --- a/docs/src/types/commit/CommitDocsTopbarItem.ts +++ b/docs/src/types/commit/CommitDocsTopbarItem.ts @@ -25,4 +25,4 @@ export interface CommitDocsTopbarItem{ icon?: string /** Is Primary Button : Check */ is_primary_button?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitOrganization.ts b/docs/src/types/commit/CommitOrganization.ts index 15aee35..9284c32 100644 --- a/docs/src/types/commit/CommitOrganization.ts +++ b/docs/src/types/commit/CommitOrganization.ts @@ -18,4 +18,4 @@ export interface CommitOrganization{ image?: string /** About : Data */ about?: string -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitProject.ts b/docs/src/types/commit/CommitProject.ts index e05dd53..6605b77 100644 --- a/docs/src/types/commit/CommitProject.ts +++ b/docs/src/types/commit/CommitProject.ts @@ -26,4 +26,4 @@ export interface CommitProject{ path_to_folder?: string /** Description : Data */ description?: string -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitProjectBranch.ts b/docs/src/types/commit/CommitProjectBranch.ts index c03d8c0..c0d2049 100644 --- a/docs/src/types/commit/CommitProjectBranch.ts +++ b/docs/src/types/commit/CommitProjectBranch.ts @@ -34,4 +34,4 @@ export interface CommitProjectBranch{ whitelisted_apis?: any /** Documentation : JSON */ documentation?: any -} \ No newline at end of file +} diff --git a/docs/src/types/commit/CommitSettings.ts b/docs/src/types/commit/CommitSettings.ts index b3662ac..753c761 100644 --- a/docs/src/types/commit/CommitSettings.ts +++ b/docs/src/types/commit/CommitSettings.ts @@ -12,4 +12,4 @@ export interface CommitSettings{ idx?: number /** Show System Apps : Check */ show_system_apps?: 0 | 1 -} \ No newline at end of file +} diff --git a/docs/src/types/commit/GithubSettings.ts b/docs/src/types/commit/GithubSettings.ts index 2d29783..2a8e198 100644 --- a/docs/src/types/commit/GithubSettings.ts +++ b/docs/src/types/commit/GithubSettings.ts @@ -24,4 +24,4 @@ export interface GithubSettings{ redirect_uri?: string /** Scopes : JSON */ scopes?: any -} \ No newline at end of file +} diff --git a/docs/src/types/commit/GithubToken.ts b/docs/src/types/commit/GithubToken.ts index 67bb70d..1d01384 100644 --- a/docs/src/types/commit/GithubToken.ts +++ b/docs/src/types/commit/GithubToken.ts @@ -25,4 +25,4 @@ export interface GithubToken{ refresh_token_expire_in?: number /** Scopes : Table - OAuth Scope */ scopes?: OAuthScope[] -} \ No newline at end of file +} diff --git a/docs/src/types/commit/LinkedCommitDocsPage.ts b/docs/src/types/commit/LinkedCommitDocsPage.ts index b4f1dea..cdf968b 100644 --- a/docs/src/types/commit/LinkedCommitDocsPage.ts +++ b/docs/src/types/commit/LinkedCommitDocsPage.ts @@ -12,4 +12,4 @@ export interface LinkedCommitDocsPage{ idx?: number /** Commit Docs Page : Link - Commit Docs Page */ commit_docs_page: string -} \ No newline at end of file +} diff --git a/docs/src/types/commit/OpenAISettings.ts b/docs/src/types/commit/OpenAISettings.ts index 9fd1a10..fdb10e6 100644 --- a/docs/src/types/commit/OpenAISettings.ts +++ b/docs/src/types/commit/OpenAISettings.ts @@ -16,4 +16,4 @@ export interface OpenAISettings{ api_key: string /** Project : Data */ project?: string -} \ No newline at end of file +} diff --git a/docs/src/utils/defaults.ts b/docs/src/utils/defaults.ts index 8c7b441..a28e726 100644 --- a/docs/src/utils/defaults.ts +++ b/docs/src/utils/defaults.ts @@ -16,4 +16,4 @@ export const getCommitDocsHeaderAndDescription = () => { // @ts-expect-error const image = window.frappe?.boot?.commit_docs_header_image_url ?? '' return { header, description, image } -} \ No newline at end of file +} diff --git a/docs/tailwind.config.js b/docs/tailwind.config.js index 2177dd5..be2dd0f 100644 --- a/docs/tailwind.config.js +++ b/docs/tailwind.config.js @@ -74,6 +74,62 @@ export const theme = { }, }, }; +// ✅ Add the safelist here +export const safelist = [ + // --- Text colors + { pattern: /text-(slate|gray|red|yellow|green|blue|indigo|purple|pink)-(50|100|200|300|400|500|600|700|800|900)/ }, + + // --- Background colors + { pattern: /bg-(white|black|slate|gray|red|yellow|green|blue|indigo|purple|pink)-(50|100|200|300|400|500|600|700|800|900)/ }, + + // --- Padding and Margin + { pattern: /p[trblxy]?-(0|1|2|3|4|5|6|8|10|12|16|20)/ }, + { pattern: /m[trblxy]?-(0|1|2|3|4|5|6|8|10|12|16|20)/ }, + + // --- Text styles + 'text-sm', 'text-base', 'text-lg', 'text-xl', 'text-2xl', 'text-3xl', 'text-4xl', + 'font-light', 'font-normal', 'font-medium', 'font-semibold', 'font-bold', + 'italic', 'underline', 'line-through', 'uppercase', 'lowercase', 'capitalize', + 'text-left', 'text-center', 'text-right', 'text-justify', + + // --- Layout + 'block', 'inline-block', 'inline', 'flex', 'inline-flex', 'grid', + 'flex-row', 'flex-col', 'items-center', 'justify-center', 'justify-between', 'gap-2', 'gap-4', 'gap-6', + + // --- Borders & Radius + { pattern: /border(-(2|4|8))?/ }, + { pattern: /border-(slate|gray|red|yellow|green|blue|indigo|purple|pink)-(100|200|300|400|500|600|700)/ }, + { pattern: /rounded(-(none|sm|md|lg|xl|2xl|3xl|full))?/ }, + + // --- Shadow + 'shadow', 'shadow-sm', 'shadow-md', 'shadow-lg', 'shadow-xl', 'shadow-2xl', + + // --- Width & Height + { pattern: /w-(auto|full|screen|max|min|[0-9]+\/[0-9]+)/ }, + { pattern: /h-(auto|full|screen|max|min|[0-9]+\/[0-9]+)/ }, + { pattern: /max-w-(xs|sm|md|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl)/ }, + + // --- Position + 'relative', 'absolute', 'fixed', 'sticky', + { pattern: /top-(0|1|2|4|8|16)/ }, + { pattern: /left-(0|1|2|4|8|16)/ }, + + // --- Overflow, Display + 'overflow-hidden', 'overflow-scroll', 'overflow-auto', + 'hidden', 'visible', + + // --- Z-index + { pattern: /z-(0|10|20|30|40|50)/ }, + + // --- Misc + 'cursor-pointer', 'select-none', 'transition', 'duration-150', 'duration-300', 'ease-in-out', + + // --- Lists + 'list-disc', 'list-decimal', 'list-none', 'pl-4', 'pl-6', + + // --- Code blocks + 'bg-gray-900', 'text-white', 'p-4', 'rounded', 'overflow-x-auto', +]; export const plugins = [ import('tailwindcss-animate'), import('@tailwindcss/typography'), diff --git a/docs/tsconfig.app.json b/docs/tsconfig.app.json index e0b009c..6c07a2e 100644 --- a/docs/tsconfig.app.json +++ b/docs/tsconfig.app.json @@ -5,14 +5,12 @@ "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, diff --git a/docs/tsconfig.json b/docs/tsconfig.json index e0b009c..6c07a2e 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -5,14 +5,12 @@ "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, diff --git a/docs/yarn.lock b/docs/yarn.lock index fadf6aa..532a198 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -15,7 +15,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": +"@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -24,49 +24,49 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/compat-data@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7" - integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg== +"@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== "@babel/core@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/helper-compilation-targets" "^7.26.5" "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.26.0", "@babel/generator@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" - integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== +"@babel/generator@^7.26.10", "@babel/generator@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" + integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== dependencies: - "@babel/parser" "^7.26.5" - "@babel/types" "^7.26.5" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/helper-compilation-targets@^7.25.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" - integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== +"@babel/helper-compilation-targets@^7.26.5": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" + integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== dependencies: - "@babel/compat-data" "^7.26.5" + "@babel/compat-data" "^7.26.8" "@babel/helper-validator-option" "^7.25.9" browserslist "^4.24.0" lru-cache "^5.1.1" @@ -109,20 +109,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== +"@babel/helpers@^7.26.10": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" + integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" - integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" + integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== dependencies: - "@babel/types" "^7.26.5" + "@babel/types" "^7.27.0" "@babel/plugin-transform-react-jsx-self@^7.25.9": version "7.25.9" @@ -138,165 +138,172 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== +"@babel/runtime@^7.7.6": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" + regenerator-runtime "^0.14.0" -"@babel/traverse@^7.25.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.5.tgz#6d0be3e772ff786456c1a37538208286f6e79021" - integrity sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ== +"@babel/template@^7.26.9", "@babel/template@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" + integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" + integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== dependencies: "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.5" - "@babel/parser" "^7.26.5" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.5" + "@babel/generator" "^7.27.0" + "@babel/parser" "^7.27.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" - integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" + integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== dependencies: "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@esbuild/aix-ppc64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" - integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== - -"@esbuild/android-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" - integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== - -"@esbuild/android-arm@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" - integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== - -"@esbuild/android-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" - integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== - -"@esbuild/darwin-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" - integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== - -"@esbuild/darwin-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" - integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== - -"@esbuild/freebsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" - integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== - -"@esbuild/freebsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" - integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== - -"@esbuild/linux-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" - integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== - -"@esbuild/linux-arm@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" - integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== - -"@esbuild/linux-ia32@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" - integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== - -"@esbuild/linux-loong64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" - integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== - -"@esbuild/linux-mips64el@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" - integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== - -"@esbuild/linux-ppc64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" - integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== - -"@esbuild/linux-riscv64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" - integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== - -"@esbuild/linux-s390x@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" - integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== - -"@esbuild/linux-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" - integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== - -"@esbuild/netbsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" - integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== - -"@esbuild/netbsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" - integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== - -"@esbuild/openbsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" - integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== - -"@esbuild/openbsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" - integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== - -"@esbuild/sunos-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" - integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== - -"@esbuild/win32-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" - integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== - -"@esbuild/win32-ia32@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" - integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== - -"@esbuild/win32-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" - integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== +"@esbuild/aix-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8" + integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag== + +"@esbuild/android-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196" + integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w== + +"@esbuild/android-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee" + integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA== + +"@esbuild/android-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2" + integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg== + +"@esbuild/darwin-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423" + integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA== + +"@esbuild/darwin-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374" + integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA== + +"@esbuild/freebsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6" + integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w== + +"@esbuild/freebsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809" + integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ== + +"@esbuild/linux-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058" + integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g== + +"@esbuild/linux-arm@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6" + integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g== + +"@esbuild/linux-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737" + integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ== + +"@esbuild/linux-loong64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a" + integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w== + +"@esbuild/linux-mips64el@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30" + integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q== + +"@esbuild/linux-ppc64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067" + integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g== + +"@esbuild/linux-riscv64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3" + integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw== + +"@esbuild/linux-s390x@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602" + integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q== + +"@esbuild/linux-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb" + integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg== + +"@esbuild/netbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac" + integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw== + +"@esbuild/netbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f" + integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg== + +"@esbuild/openbsd-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f" + integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg== + +"@esbuild/openbsd-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768" + integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw== + +"@esbuild/sunos-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb" + integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA== + +"@esbuild/win32-arm64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf" + integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q== + +"@esbuild/win32-ia32@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f" + integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg== + +"@esbuild/win32-x64@0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d" + integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA== "@eslint-community/eslint-utils@^4.2.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c" + integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== dependencies: eslint-visitor-keys "^3.4.3" @@ -305,26 +312,38 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== -"@eslint/config-array@^0.19.0": - version "0.19.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" - integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== +"@eslint/config-array@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.2.tgz#3060b809e111abfc97adb0bb1172778b90cb46aa" + integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w== dependencies: - "@eslint/object-schema" "^2.1.5" + "@eslint/object-schema" "^2.1.6" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/core@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.10.0.tgz#23727063c21b335f752dbb3a16450f6f9cbc9091" - integrity sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw== +"@eslint/config-helpers@^0.2.0": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.1.tgz#26042c028d1beee5ce2235a7929b91c52651646d" + integrity sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw== + +"@eslint/core@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e" + integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== dependencies: "@types/json-schema" "^7.0.15" -"@eslint/eslintrc@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" - integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== +"@eslint/core@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.13.0.tgz#bf02f209846d3bf996f9e8009db62df2739b458c" + integrity sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -336,22 +355,22 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.18.0": - version "9.18.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.18.0.tgz#3356f85d18ed3627ab107790b53caf7e1e3d1e84" - integrity sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA== +"@eslint/js@9.23.0": + version "9.23.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.23.0.tgz#c09ded4f3dc63b40b933bcaeb853fceddb64da30" + integrity sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw== -"@eslint/object-schema@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" - integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== -"@eslint/plugin-kit@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz#ee07372035539e7847ef834e3f5e7b79f09e3a81" - integrity sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A== +"@eslint/plugin-kit@^0.2.7": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz#47488d8f8171b5d4613e833313f3ce708e3525f8" + integrity sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA== dependencies: - "@eslint/core" "^0.10.0" + "@eslint/core" "^0.13.0" levn "^0.4.1" "@floating-ui/core@^1.6.0": @@ -404,10 +423,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== -"@humanwhocodes/retry@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" - integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== +"@humanwhocodes/retry@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" + integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -531,70 +550,100 @@ resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.1.tgz#fc169732d755c7fbad33ba8d0cd7fd10c90dc8e3" integrity sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA== -"@radix-ui/react-arrow@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz#2103721933a8bfc6e53bbfbdc1aaad5fc8ba0dd7" - integrity sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w== +"@radix-ui/primitive@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65" + integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== + +"@radix-ui/react-arrow@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz#30c0d574d7bb10eed55cd7007b92d38b03c6b2ab" + integrity sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg== dependencies: - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-avatar@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.2.tgz#24af4c66bb5271460a4a6b74c4f4f9d4789d3d90" - integrity sha512-GaC7bXQZ5VgZvVvsJ5mu/AEbjYLnhhkoidOboC50Z6FFlLA03wG2ianUoH+zgDQ31/9gCF59bE4+2bBgTyMiig== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.3.tgz#8de2bcebdc38fbe14e952ccacf05ba2cb426bd83" + integrity sha512-Paen00T4P8L8gd9bNsRMw7Cbaz85oxiv+hzomsRZgFm2byltPFDtfcoqlWJ8GyZlIBWgLssJlzLCnKU0G0302g== dependencies: "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" -"@radix-ui/react-collection@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.1.tgz#be2c7e01d3508e6d4b6d838f492e7d182f17d3b0" - integrity sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA== +"@radix-ui/react-collection@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.2.tgz#b45eccca1cb902fd078b237316bd9fa81e621e15" + integrity sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw== dependencies: "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-slot" "1.1.2" + +"@radix-ui/react-collection@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.7.tgz#d05c25ca9ac4695cc19ba91f42f686e3ea2d9aec" + integrity sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" "@radix-ui/react-compose-refs@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz#6f766faa975f8738269ebb8a23bad4f5a8d2faec" integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw== +"@radix-ui/react-compose-refs@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" + integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== + "@radix-ui/react-context@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== + "@radix-ui/react-direction@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== -"@radix-ui/react-dismissable-layer@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.3.tgz#4ee0f0f82d53bf5bd9db21665799bb0d1bad5ed8" - integrity sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg== +"@radix-ui/react-direction@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14" + integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== + +"@radix-ui/react-dismissable-layer@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz#96dde2be078c694a621e55e047406c58cd5fe774" + integrity sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg== dependencies: "@radix-ui/primitive" "1.1.1" "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-escape-keydown" "1.1.0" "@radix-ui/react-dropdown-menu@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.4.tgz#5e1f453296dd9ae99224a26c36851832d26cf507" - integrity sha512-iXU1Ab5ecM+yEepGAWK8ZhMyKX4ubFdCNtol4sT9D0OVErG9PNElfx3TQhjw7n7BC5nFVz68/5//clWy+8TXzA== + version "2.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.6.tgz#b66b62648b378370aa3c38e5727fd3bc5b8792a3" + integrity sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA== dependencies: "@radix-ui/primitive" "1.1.1" "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-menu" "2.1.4" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-menu" "2.1.6" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-focus-guards@1.1.1": @@ -602,13 +651,13 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe" integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg== -"@radix-ui/react-focus-scope@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz#5c602115d1db1c4fcfa0fae4c3b09bb8919853cb" - integrity sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA== +"@radix-ui/react-focus-scope@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz#c0a4519cd95c772606a82fc5b96226cd7fdd2602" + integrity sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA== dependencies: "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-id@1.1.0": @@ -618,52 +667,59 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" -"@radix-ui/react-menu@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.4.tgz#ac7aec296f29608206a7c6ef6335d8f102edaa95" - integrity sha512-BnOgVoL6YYdHAG6DtXONaR29Eq4nvbi8rutrV/xlr3RQCMMb3yqP85Qiw/3NReozrSW+4dfLkK+rc1hb4wPU/A== +"@radix-ui/react-id@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7" + integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-menu@2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.6.tgz#05fb1ef3fd7545c8abe61178372902970cdec3ce" + integrity sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-collection" "1.1.2" "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.3" + "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.2" "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-popper" "1.2.1" - "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-popper" "1.2.2" + "@radix-ui/react-portal" "1.1.4" "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-roving-focus" "1.1.1" - "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-roving-focus" "1.1.2" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-use-callback-ref" "1.1.0" - aria-hidden "^1.1.1" - react-remove-scroll "^2.6.1" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" -"@radix-ui/react-popper@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.1.tgz#2fc66cfc34f95f00d858924e3bee54beae2dff0a" - integrity sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw== +"@radix-ui/react-popper@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.2.tgz#d2e1ee5a9b24419c5936a1b7f6f472b7b412b029" + integrity sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA== dependencies: "@floating-ui/react-dom" "^2.0.0" - "@radix-ui/react-arrow" "1.1.1" + "@radix-ui/react-arrow" "1.1.2" "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" "@radix-ui/react-use-rect" "1.1.0" "@radix-ui/react-use-size" "1.1.0" "@radix-ui/rect" "1.1.0" -"@radix-ui/react-portal@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.3.tgz#b0ea5141103a1671b715481b13440763d2ac4440" - integrity sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw== +"@radix-ui/react-portal@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.4.tgz#ff5401ff63c8a825c46eea96d3aef66074b8c0c8" + integrity sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA== dependencies: - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-layout-effect" "1.1.0" "@radix-ui/react-presence@1.1.2": @@ -674,76 +730,132 @@ "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-layout-effect" "1.1.0" -"@radix-ui/react-primitive@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz#6d9efc550f7520135366f333d1e820cf225fad9e" - integrity sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg== +"@radix-ui/react-presence@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced" + integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA== dependencies: - "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" -"@radix-ui/react-roving-focus@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz#3b3abb1e03646937f28d9ab25e96343667ca6520" - integrity sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw== +"@radix-ui/react-primitive@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz#ac8b7854d87b0d7af388d058268d9a7eb64ca8ef" + integrity sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w== + dependencies: + "@radix-ui/react-slot" "1.1.2" + +"@radix-ui/react-primitive@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== + dependencies: + "@radix-ui/react-slot" "1.2.3" + +"@radix-ui/react-roving-focus@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz#46030496d2a490c4979d29a7e1252465e51e4b0b" + integrity sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.2.2" + +"@radix-ui/react-roving-focus@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz#815d051a54299114a68db6eb8d34c41a3c0a646f" + integrity sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-collection" "1.1.2" "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-controllable-state" "1.1.0" -"@radix-ui/react-slot@1.1.1", "@radix-ui/react-slot@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.1.tgz#ab9a0ffae4027db7dc2af503c223c978706affc3" - integrity sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g== +"@radix-ui/react-slot@1.1.2", "@radix-ui/react-slot@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.2.tgz#daffff7b2bfe99ade63b5168407680b93c00e1c6" + integrity sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ== dependencies: "@radix-ui/react-compose-refs" "1.1.1" +"@radix-ui/react-slot@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + +"@radix-ui/react-tabs@^1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz#99b3522c73db9263f429a6d0f5a9acb88df3b129" + integrity sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw== + dependencies: + "@radix-ui/primitive" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-presence" "1.1.4" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.10" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-toast@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@radix-ui/react-toast/-/react-toast-1.2.4.tgz#52fe0e5f169209b7fa300673491a6bedde940279" - integrity sha512-Sch9idFJHJTMH9YNpxxESqABcAFweJG4tKv+0zo0m5XBvUSL8FM5xKcJLFLXononpePs8IclyX1KieL5SDUNgA== + version "1.2.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toast/-/react-toast-1.2.6.tgz#f8d4bb2217851d221d700ac48fbe866b35023361" + integrity sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.1" + "@radix-ui/react-collection" "1.1.2" "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.3" - "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-dismissable-layer" "1.1.5" + "@radix-ui/react-portal" "1.1.4" "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-visually-hidden" "1.1.1" + "@radix-ui/react-visually-hidden" "1.1.2" "@radix-ui/react-tooltip@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.6.tgz#eab98e9a5c876ef0abfae3cfeee229870528ed06" - integrity sha512-TLB5D8QLExS1uDn7+wH/bjEmRurNMTzNrtq7IjaS4kjion9NtzsTGkvR5+i7yc9q01Pi2KMM2cN3f8UG4IvvXA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.1.8.tgz#1aa2a575630fca2b2845b62f85056bb826bec456" + integrity sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA== dependencies: "@radix-ui/primitive" "1.1.1" "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.3" + "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-id" "1.1.0" - "@radix-ui/react-popper" "1.2.1" - "@radix-ui/react-portal" "1.1.3" + "@radix-ui/react-popper" "1.2.2" + "@radix-ui/react-portal" "1.1.4" "@radix-ui/react-presence" "1.1.2" - "@radix-ui/react-primitive" "2.0.1" - "@radix-ui/react-slot" "1.1.1" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-visually-hidden" "1.1.1" + "@radix-ui/react-visually-hidden" "1.1.2" "@radix-ui/react-use-callback-ref@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== + "@radix-ui/react-use-controllable-state@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" @@ -751,6 +863,21 @@ dependencies: "@radix-ui/react-use-callback-ref" "1.1.0" +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== + dependencies: + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-escape-keydown@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" @@ -763,6 +890,11 @@ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== + "@radix-ui/react-use-rect@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" @@ -777,12 +909,12 @@ dependencies: "@radix-ui/react-use-layout-effect" "1.1.0" -"@radix-ui/react-visually-hidden@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz#f7b48c1af50dfdc366e92726aee6d591996c5752" - integrity sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg== +"@radix-ui/react-visually-hidden@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.2.tgz#8f6025507eb5d8b4b3215ebfd2c71a6632323a62" + integrity sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q== dependencies: - "@radix-ui/react-primitive" "2.0.1" + "@radix-ui/react-primitive" "2.0.2" "@radix-ui/rect@1.1.0": version "1.1.0" @@ -798,156 +930,161 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809" - integrity sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q== - -"@rollup/rollup-android-arm64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz#9d81ea54fc5650eb4ebbc0a7d84cee331bfa30ad" - integrity sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w== - -"@rollup/rollup-darwin-arm64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz#29448cb1370cf678b50743d2e392be18470abc23" - integrity sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q== - -"@rollup/rollup-darwin-x64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz#0ca99741c3ed096700557a43bb03359450c7857d" - integrity sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA== - -"@rollup/rollup-freebsd-arm64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz#233f8e4c2f54ad9b719cd9645887dcbd12b38003" - integrity sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ== - -"@rollup/rollup-freebsd-x64@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz#dfba762a023063dc901610722995286df4a48360" - integrity sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw== - -"@rollup/rollup-linux-arm-gnueabihf@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz#b9da54171726266c5ef4237f462a85b3c3cf6ac9" - integrity sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg== - -"@rollup/rollup-linux-arm-musleabihf@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz#b9db69b3f85f5529eb992936d8f411ee6d04297b" - integrity sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug== - -"@rollup/rollup-linux-arm64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz#2550cf9bb4d47d917fd1ab4af756d7bbc3ee1528" - integrity sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw== - -"@rollup/rollup-linux-arm64-musl@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz#9d06b26d286c7dded6336961a2f83e48330e0c80" - integrity sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA== - -"@rollup/rollup-linux-loongarch64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz#e957bb8fee0c8021329a34ca8dfa825826ee0e2e" - integrity sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz#e8585075ddfb389222c5aada39ea62d6d2511ccc" - integrity sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw== - -"@rollup/rollup-linux-riscv64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz#7d0d40cee7946ccaa5a4e19a35c6925444696a9e" - integrity sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw== - -"@rollup/rollup-linux-s390x-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz#c2dcd8a4b08b2f2778eceb7a5a5dfde6240ebdea" - integrity sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA== - -"@rollup/rollup-linux-x64-gnu@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz#183637d91456877cb83d0a0315eb4788573aa588" - integrity sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg== - -"@rollup/rollup-linux-x64-musl@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz#036a4c860662519f1f9453807547fd2a11d5bb01" - integrity sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow== - -"@rollup/rollup-win32-arm64-msvc@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz#51cad812456e616bfe4db5238fb9c7497e042a52" - integrity sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw== - -"@rollup/rollup-win32-ia32-msvc@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz#661c8b3e4cd60f51deaa39d153aac4566e748e5e" - integrity sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw== - -"@rollup/rollup-win32-x64-msvc@4.30.1": - version "4.30.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz#73bf1885ff052b82fbb0f82f8671f73c36e9137c" - integrity sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og== - -"@shikijs/core@1.27.2": - version "1.27.2" - resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.27.2.tgz#8c648a11c249f552c7aad2b08242fdc657786976" - integrity sha512-ns1dokDr0KE1lQ9mWd4rqaBkhSApk0qGCK1+lOqwnkQSkVZ08UGqXj1Ef8dAcTMZNFkN6PSNjkL5TYNX7pyPbQ== - dependencies: - "@shikijs/engine-javascript" "1.27.2" - "@shikijs/engine-oniguruma" "1.27.2" - "@shikijs/types" "1.27.2" +"@rollup/rollup-android-arm-eabi@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz#1d8cc5dd3d8ffe569d8f7f67a45c7909828a0f66" + integrity sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA== + +"@rollup/rollup-android-arm64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz#9c136034d3d9ed29d0b138c74dd63c5744507fca" + integrity sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ== + +"@rollup/rollup-darwin-arm64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz#830d07794d6a407c12b484b8cf71affd4d3800a6" + integrity sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q== + +"@rollup/rollup-darwin-x64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz#b26f0f47005c1fa5419a880f323ed509dc8d885c" + integrity sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ== + +"@rollup/rollup-freebsd-arm64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz#2b60c81ac01ff7d1bc8df66aee7808b6690c6d19" + integrity sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ== + +"@rollup/rollup-freebsd-x64@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz#4826af30f4d933d82221289068846c9629cc628c" + integrity sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q== + +"@rollup/rollup-linux-arm-gnueabihf@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz#a1f4f963d5dcc9e5575c7acf9911824806436bf7" + integrity sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g== + +"@rollup/rollup-linux-arm-musleabihf@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz#e924b0a8b7c400089146f6278446e6b398b75a06" + integrity sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw== + +"@rollup/rollup-linux-arm64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz#cb43303274ec9a716f4440b01ab4e20c23aebe20" + integrity sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ== + +"@rollup/rollup-linux-arm64-musl@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz#531c92533ce3d167f2111bfcd2aa1a2041266987" + integrity sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA== + +"@rollup/rollup-linux-loongarch64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz#53403889755d0c37c92650aad016d5b06c1b061a" + integrity sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz#f669f162e29094c819c509e99dbeced58fc708f9" + integrity sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ== + +"@rollup/rollup-linux-riscv64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz#4bab37353b11bcda5a74ca11b99dea929657fd5f" + integrity sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ== + +"@rollup/rollup-linux-riscv64-musl@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz#4d66be1ce3cfd40a7910eb34dddc7cbd4c2dd2a5" + integrity sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA== + +"@rollup/rollup-linux-s390x-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz#7181c329395ed53340a0c59678ad304a99627f6d" + integrity sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA== + +"@rollup/rollup-linux-x64-gnu@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz#00825b3458094d5c27cb4ed66e88bfe9f1e65f90" + integrity sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA== + +"@rollup/rollup-linux-x64-musl@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz#81caac2a31b8754186f3acc142953a178fcd6fba" + integrity sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg== + +"@rollup/rollup-win32-arm64-msvc@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz#3a3f421f5ce9bd99ed20ce1660cce7cee3e9f199" + integrity sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ== + +"@rollup/rollup-win32-ia32-msvc@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz#a44972d5cdd484dfd9cf3705a884bf0c2b7785a7" + integrity sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ== + +"@rollup/rollup-win32-x64-msvc@4.39.0": + version "4.39.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz#bfe0214e163f70c4fec1c8f7bb8ce266f4c05b7e" + integrity sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug== + +"@shikijs/core@1.29.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.29.2.tgz#9c051d3ac99dd06ae46bd96536380c916e552bf3" + integrity sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ== + dependencies: + "@shikijs/engine-javascript" "1.29.2" + "@shikijs/engine-oniguruma" "1.29.2" + "@shikijs/types" "1.29.2" "@shikijs/vscode-textmate" "^10.0.1" "@types/hast" "^3.0.4" hast-util-to-html "^9.0.4" -"@shikijs/engine-javascript@1.27.2": - version "1.27.2" - resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.27.2.tgz#65f268d2d9877bb41a32bf6b4a90f67e7b59a781" - integrity sha512-0JB7U5vJc16NShBdxv9hSSJYSKX79+32O7F4oXIxJLdYfomyFvx4B982ackUI9ftO9T3WwagkiiD3nOxOOLiGA== +"@shikijs/engine-javascript@1.29.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz#a821ad713a3e0b7798a1926fd9e80116e38a1d64" + integrity sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A== dependencies: - "@shikijs/types" "1.27.2" + "@shikijs/types" "1.29.2" "@shikijs/vscode-textmate" "^10.0.1" - oniguruma-to-es "^2.0.0" + oniguruma-to-es "^2.2.0" -"@shikijs/engine-oniguruma@1.27.2": - version "1.27.2" - resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.27.2.tgz#b120e6aaf654fccec4268f1c12bf70b24fd7373f" - integrity sha512-FZYKD1KN7srvpkz4lbGLOYWlyDU4Rd+2RtuKfABTkafAPOFr+J6umfIwY/TzOQqfNtWjL7SAwPAO0dcOraRLaQ== +"@shikijs/engine-oniguruma@1.29.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz#d879717ced61d44e78feab16f701f6edd75434f1" + integrity sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA== dependencies: - "@shikijs/types" "1.27.2" + "@shikijs/types" "1.29.2" "@shikijs/vscode-textmate" "^10.0.1" -"@shikijs/langs@1.27.2": - version "1.27.2" - resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-1.27.2.tgz#5dfee5e4887781d12fb70dbc1dfc3caabfcbeced" - integrity sha512-MSrknKL0DbeXvhtSigMLIzjPOOQfvK7fsbcRv2NUUB0EvuTTomY8/U+lAkczYrXY2+dygKOapJKk8ScFYbtoNw== +"@shikijs/langs@1.29.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-1.29.2.tgz#4f1de46fde8991468c5a68fa4a67dd2875d643cd" + integrity sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ== dependencies: - "@shikijs/types" "1.27.2" + "@shikijs/types" "1.29.2" -"@shikijs/themes@1.27.2": - version "1.27.2" - resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-1.27.2.tgz#b0e99c4c10b82f1af4dccdf7320a6a1a790bab94" - integrity sha512-Yw/uV7EijjWavIIZLoWneTAohcbBqEKj6XMX1bfMqO3llqTKsyXukPp1evf8qPqzUHY7ibauqEaQchhfi857mg== +"@shikijs/themes@1.29.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-1.29.2.tgz#293cc5c83dd7df3fdc8efa25cec8223f3a6acb0d" + integrity sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g== dependencies: - "@shikijs/types" "1.27.2" + "@shikijs/types" "1.29.2" -"@shikijs/types@1.27.2": - version "1.27.2" - resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.27.2.tgz#0288966973ac8d9c4186998e6be9969ff9a045a4" - integrity sha512-DM9OWUyjmdYdnKDpaGB/GEn9XkToyK1tqxuqbmc5PV+5K8WjjwfygL3+cIvbkSw2v1ySwHDgqATq/+98pJ4Kyg== +"@shikijs/types@1.29.2": + version "1.29.2" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.29.2.tgz#a93fdb410d1af8360c67bf5fc1d1a68d58e21c4f" + integrity sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw== dependencies: "@shikijs/vscode-textmate" "^10.0.1" "@types/hast" "^3.0.4" "@shikijs/vscode-textmate@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz#d06d45b67ac5e9b0088e3f67ebd3f25c6c3d711a" - integrity sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg== + version "10.0.2" + resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" + integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== "@socket.io/component-emitter@~3.1.0": version "3.1.2" @@ -964,13 +1101,6 @@ lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" -"@types/acorn@^4.0.0": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -983,9 +1113,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" @@ -998,17 +1128,12 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" + integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== dependencies: "@babel/types" "^7.20.7" -"@types/cookie@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" - integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== - "@types/debug@^4.0.0": version "4.1.12" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" @@ -1023,10 +1148,10 @@ dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@1.0.6", "@types/estree@^1.0.0", "@types/estree@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== +"@types/estree@*", "@types/estree@1.0.7", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.7.tgz#4158d3105276773d5b7695cd4834b1722e4f37a8" + integrity sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== "@types/hast@^3.0.0", "@types/hast@^3.0.4": version "3.0.4" @@ -1062,31 +1187,44 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== -"@types/node@^22.10.7": - version "22.10.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.7.tgz#14a1ca33fd0ebdd9d63593ed8d3fbc882a6d28d7" - integrity sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg== - dependencies: - undici-types "~6.20.0" +"@types/node@20.4.2": + version "20.4.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" + integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== "@types/prop-types@*": version "15.7.14" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== -"@types/react-dom@^18.3.5": - version "18.3.5" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716" - integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q== +"@types/react-dom@18.2.0": + version "18.2.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.0.tgz#374f28074bb117f56f58c4f3f71753bebb545156" + integrity sha512-8yQrvS6sMpSwIovhPOwfyNf2Wz6v/B62LFSVYQ85+Rq3tLsBIG7rP5geMxaijTUxSkrO6RzN/IRuIAADYQsleA== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "19.1.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.0.tgz#73c43ad9bc43496ca8184332b111e2aef63fc9da" + integrity sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w== + dependencies: + csstype "^3.0.2" -"@types/react@^18.3.18": - version "18.3.18" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.18.tgz#9b382c4cd32e13e463f97df07c2ee3bbcd26904b" - integrity sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ== +"@types/react@18.2.0": + version "18.2.0" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.0.tgz#15cda145354accfc09a18d2f2305f9fc099ada21" + integrity sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA== dependencies: "@types/prop-types" "*" + "@types/scheduler" "*" csstype "^3.0.2" +"@types/scheduler@*": + version "0.26.0" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.26.0.tgz#2b7183b9bbb622d130b23bedf06899b7fec7eed5" + integrity sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA== + "@types/unist@*", "@types/unist@^3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" @@ -1098,9 +1236,9 @@ integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== "@ungap/structured-clone@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" - integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== "@vitejs/plugin-react@^4.3.4": version "4.3.4" @@ -1119,9 +1257,9 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.0.0, acorn@^8.14.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== ajv@^6.12.4: version "6.12.6" @@ -1178,7 +1316,7 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-hidden@^1.1.1: +aria-hidden@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522" integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== @@ -1196,21 +1334,21 @@ asynckit@^0.4.0: integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== autoprefixer@^10.4.20: - version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + version "10.4.21" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.1" + picocolors "^1.1.1" postcss-value-parser "^4.2.0" -axios@^1.7.4: - version "1.7.9" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" - integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== +axios@^1.8.2: + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -1253,7 +1391,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.23.3, browserslist@^4.24.0: +browserslist@^4.24.0, browserslist@^4.24.4: version "4.24.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== @@ -1263,6 +1401,14 @@ browserslist@^4.23.3, browserslist@^4.24.0: node-releases "^2.0.19" update-browserslist-db "^1.1.1" +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1273,10 +1419,10 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: - version "1.0.30001692" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz#4585729d95e6b95be5b439da6ab55250cd125bf9" - integrity sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A== +caniuse-lite@^1.0.30001688, caniuse-lite@^1.0.30001702: + version "1.0.30001709" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001709.tgz#61b34187b52851ef34c44d90f39a94dc5b0acb43" + integrity sha512-NgL3vUTnDrPCZ3zTahp4fsugQ4dc7EKTSzwQDPEel6DMoMnfH2jhry9n2Zm8onbSR+f/QtKHFOA+iAQu4kbtWA== ccount@^2.0.0: version "2.0.1" @@ -1387,12 +1533,7 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" - integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== - -cross-spawn@^7.0.0, cross-spawn@^7.0.6: +cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -1426,9 +1567,9 @@ debug@~4.3.1, debug@~4.3.2: ms "^2.1.3" decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz#5d6ce68792808901210dac42a8e9853511e2b8bf" + integrity sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w== dependencies: character-entities "^2.0.0" @@ -1469,15 +1610,24 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== electron-to-chromium@^1.5.73: - version "1.5.80" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.80.tgz#ca7a8361d7305f0ec9e203ce4e633cbb8a8ef1b1" - integrity sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw== + version "1.5.130" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.130.tgz#19f5dd2cf166a8dd1350b08230a33faba0d8f4ec" + integrity sha512-Ou2u7L9j2XLZbhqzyX0jWDj6gA8D3jIfVzt4rikLf3cGBa0VdReuFimBKS9tQJA4+XpeCxj1NoWlfBXzbMa9IA== emoji-regex-xs@^1.0.0: version "1.0.0" @@ -1515,6 +1665,33 @@ entities@^4.5.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + esast-util-from-estree@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad" @@ -1535,36 +1712,36 @@ esast-util-from-js@^2.0.0: esast-util-from-estree "^2.0.0" vfile-message "^4.0.0" -esbuild@^0.24.2: - version "0.24.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" - integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== +esbuild@^0.25.0: + version "0.25.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b" + integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ== optionalDependencies: - "@esbuild/aix-ppc64" "0.24.2" - "@esbuild/android-arm" "0.24.2" - "@esbuild/android-arm64" "0.24.2" - "@esbuild/android-x64" "0.24.2" - "@esbuild/darwin-arm64" "0.24.2" - "@esbuild/darwin-x64" "0.24.2" - "@esbuild/freebsd-arm64" "0.24.2" - "@esbuild/freebsd-x64" "0.24.2" - "@esbuild/linux-arm" "0.24.2" - "@esbuild/linux-arm64" "0.24.2" - "@esbuild/linux-ia32" "0.24.2" - "@esbuild/linux-loong64" "0.24.2" - "@esbuild/linux-mips64el" "0.24.2" - "@esbuild/linux-ppc64" "0.24.2" - "@esbuild/linux-riscv64" "0.24.2" - "@esbuild/linux-s390x" "0.24.2" - "@esbuild/linux-x64" "0.24.2" - "@esbuild/netbsd-arm64" "0.24.2" - "@esbuild/netbsd-x64" "0.24.2" - "@esbuild/openbsd-arm64" "0.24.2" - "@esbuild/openbsd-x64" "0.24.2" - "@esbuild/sunos-x64" "0.24.2" - "@esbuild/win32-arm64" "0.24.2" - "@esbuild/win32-ia32" "0.24.2" - "@esbuild/win32-x64" "0.24.2" + "@esbuild/aix-ppc64" "0.25.2" + "@esbuild/android-arm" "0.25.2" + "@esbuild/android-arm64" "0.25.2" + "@esbuild/android-x64" "0.25.2" + "@esbuild/darwin-arm64" "0.25.2" + "@esbuild/darwin-x64" "0.25.2" + "@esbuild/freebsd-arm64" "0.25.2" + "@esbuild/freebsd-x64" "0.25.2" + "@esbuild/linux-arm" "0.25.2" + "@esbuild/linux-arm64" "0.25.2" + "@esbuild/linux-ia32" "0.25.2" + "@esbuild/linux-loong64" "0.25.2" + "@esbuild/linux-mips64el" "0.25.2" + "@esbuild/linux-ppc64" "0.25.2" + "@esbuild/linux-riscv64" "0.25.2" + "@esbuild/linux-s390x" "0.25.2" + "@esbuild/linux-x64" "0.25.2" + "@esbuild/netbsd-arm64" "0.25.2" + "@esbuild/netbsd-x64" "0.25.2" + "@esbuild/openbsd-arm64" "0.25.2" + "@esbuild/openbsd-x64" "0.25.2" + "@esbuild/sunos-x64" "0.25.2" + "@esbuild/win32-arm64" "0.25.2" + "@esbuild/win32-ia32" "0.25.2" + "@esbuild/win32-x64" "0.25.2" escalade@^3.2.0: version "3.2.0" @@ -1582,19 +1759,19 @@ escape-string-regexp@^5.0.0: integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== eslint-plugin-react-hooks@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz#3d34e37d5770866c34b87d5b499f5f0b53bf0854" - integrity sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" + integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== eslint-plugin-react-refresh@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz#149dbc9279bd16942409f1c1d2f0dce3299430ef" - integrity sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ== + version "0.4.19" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz#f15020c0caa58e33fc4efda27d328281ca74e53d" + integrity sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ== -eslint-scope@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" - integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== +eslint-scope@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d" + integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -1610,20 +1787,21 @@ eslint-visitor-keys@^4.2.0: integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== eslint@^9.17.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.18.0.tgz#c95b24de1183e865de19f607fda6518b54827850" - integrity sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA== + version "9.23.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.23.0.tgz#b88f3ab6dc83bcb927fdb54407c69ffe5f2441a6" + integrity sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.19.0" - "@eslint/core" "^0.10.0" - "@eslint/eslintrc" "^3.2.0" - "@eslint/js" "9.18.0" - "@eslint/plugin-kit" "^0.2.5" + "@eslint/config-array" "^0.19.2" + "@eslint/config-helpers" "^0.2.0" + "@eslint/core" "^0.12.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.23.0" + "@eslint/plugin-kit" "^0.2.7" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.4.1" + "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" "@types/json-schema" "^7.0.15" ajv "^6.12.4" @@ -1631,7 +1809,7 @@ eslint@^9.17.0: cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.2.0" + eslint-scope "^8.3.0" eslint-visitor-keys "^4.2.0" espree "^10.3.0" esquery "^1.5.0" @@ -1773,9 +1951,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" - integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -1810,9 +1988,9 @@ flat-cache@^4.0.0: keyv "^4.5.4" flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.15.6: version "1.15.9" @@ -1820,20 +1998,21 @@ follow-redirects@^1.15.6: integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" fraction.js@^4.3.7: @@ -1842,29 +2021,29 @@ fraction.js@^4.3.7: integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== framer-motion@^11.18.0: - version "11.18.0" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.18.0.tgz#574f311dd91333fad59214cc8e2dee0f5bab99c4" - integrity sha512-Vmjl5Al7XqKHzDFnVqzi1H9hzn5w4eN/bdqXTymVpU2UuMQuz9w6UPdsL9dFBeH7loBlnu4qcEXME+nvbkcIOw== + version "11.18.2" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.18.2.tgz#0c6bd05677f4cfd3b3bdead4eb5ecdd5ed245718" + integrity sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w== dependencies: - motion-dom "^11.16.4" - motion-utils "^11.16.0" + motion-dom "^11.18.1" + motion-utils "^11.18.1" tslib "^2.4.0" -frappe-js-sdk@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.7.0.tgz#ed289a11e7cd03df71840d93687c230a1dcbebb9" - integrity sha512-M8kPf0dTzdYRpQvg/adbyioY2byLOEfNQsfK+b3ebIgXCNjX1H38GvhhU3OX9o/2x2QB65npgI7ODlUmpT6grA== +frappe-js-sdk@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/frappe-js-sdk/-/frappe-js-sdk-1.8.0.tgz#7f34338d0041cf073efd1056e000d80d69cbbb5b" + integrity sha512-wBB+mWra9uRWLKYbqUhfSu6RY9ydRQ1n0+CngllrmFqnIdxvDs/4XdZR2aLTsvFRvargi+GblDcztL3g0P/Zug== dependencies: - axios "^1.7.4" + axios "^1.8.2" frappe-react-sdk@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.10.0.tgz#1f345069495cc62d32459af11d0f1b56a68843c0" - integrity sha512-Ft8A0hHOz71k7o0/3U2XaE5E7vQ4niN5UAR20nlGFz5WKEZq9g4/gzWHliDSLQ+8fJSMdRiK+egXeNoff4Q0PA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/frappe-react-sdk/-/frappe-react-sdk-1.11.0.tgz#18ef2e3f61a06ac31173629e7d9ac798aa89942b" + integrity sha512-YlAC9/1gV40PARpRxS39A5iJxlkN6ArDKpSf4fLcBJ8WX/aRreCW/f1E/3TLJC5fJExZ9zvn7L5CAVmsL1qvcg== dependencies: - frappe-js-sdk "^1.7.0" + frappe-js-sdk "^1.8.0" socket.io-client "4.7.1" - swr "^2.3.0" + swr "^2.3.3" fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" @@ -1881,11 +2060,35 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-nonce@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + github-slugger@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" @@ -1928,15 +2131,32 @@ globals@^14.0.0: integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globals@^15.14.0: - version "15.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-15.14.0.tgz#b8fd3a8941ff3b4d38f3319d433b61bbb482e73f" - integrity sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig== + version "15.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8" + integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -1976,15 +2196,15 @@ hast-util-from-html@^2.0.0: vfile-message "^4.0.0" hast-util-from-parse5@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz#29b42758ba96535fd6021f0f533c000886c0f00f" - integrity sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A== + version "8.0.3" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e" + integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" devlop "^1.0.0" hastscript "^9.0.0" - property-information "^6.0.0" + property-information "^7.0.0" vfile "^6.0.0" vfile-location "^5.0.0" web-namespaces "^2.0.0" @@ -2030,9 +2250,9 @@ hast-util-raw@^9.0.0: zwitch "^2.0.0" hast-util-to-estree@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.1.tgz#b7f0b247d9f62127bb5db34e3a86c93d17279071" - integrity sha512-IWtwwmPskfSmma9RpzCappDUitC8t5jhAynHhc1m2+5trOgsrp7txscUSavc5Ic8PATyAjfrCK1wgtxh2cICVQ== + version "3.1.3" + resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz#e654c1c9374645135695cc0ab9f70b8fcaf733d7" + integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== dependencies: "@types/estree" "^1.0.0" "@types/estree-jsx" "^1.0.0" @@ -2045,16 +2265,16 @@ hast-util-to-estree@^3.0.0: mdast-util-mdx-expression "^2.0.0" mdast-util-mdx-jsx "^3.0.0" mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" - style-to-object "^1.0.0" + style-to-js "^1.0.0" unist-util-position "^5.0.0" zwitch "^2.0.0" hast-util-to-html@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz#d689c118c875aab1def692c58603e34335a0f5c5" - integrity sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA== + version "9.0.5" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005" + integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -2063,15 +2283,15 @@ hast-util-to-html@^9.0.4: hast-util-whitespace "^3.0.0" html-void-elements "^3.0.0" mdast-util-to-hast "^13.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" stringify-entities "^4.0.0" zwitch "^2.0.4" hast-util-to-jsx-runtime@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" - integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== + version "2.3.6" + resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" + integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== dependencies: "@types/estree" "^1.0.0" "@types/hast" "^3.0.0" @@ -2083,9 +2303,9 @@ hast-util-to-jsx-runtime@^2.0.0: mdast-util-mdx-expression "^2.0.0" mdast-util-mdx-jsx "^3.0.0" mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" - style-to-object "^1.0.0" + style-to-js "^1.0.0" unist-util-position "^5.0.0" vfile-message "^4.0.0" @@ -2127,16 +2347,28 @@ hast-util-whitespace@^3.0.0: "@types/hast" "^3.0.0" hastscript@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.0.tgz#2b76b9aa3cba8bf6d5280869f6f6f7165c230763" - integrity sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw== + version "9.0.1" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" + integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== dependencies: "@types/hast" "^3.0.0" comma-separated-tokens "^2.0.0" hast-util-parse-selector "^4.0.0" - property-information "^6.0.0" + property-information "^7.0.0" space-separated-tokens "^2.0.0" +highlight.js@^11.11.1: + version "11.11.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" + integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w== + +history@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== + dependencies: + "@babel/runtime" "^7.7.6" + html-void-elements@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" @@ -2148,9 +2380,9 @@ ignore@^5.2.0: integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -2249,9 +2481,9 @@ jiti@^1.21.6: integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== jotai@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.11.0.tgz#923f8351e0b2d721036af892c0ae25625049d120" - integrity sha512-zKfoBBD1uDw3rljwHkt0fWuja1B76R7CjznuBO+mSX6jpsO1EBeWNRKpeaQho9yPI/pvCv4recGfgOXGxwPZvQ== + version "2.12.2" + resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.12.2.tgz#21626f5f019fc971b4da6bc528790a02d1448e3c" + integrity sha512-oN8715y7MkjXlSrpyjlR887TOuc/NLZMs9gvgtfWH/JP47ChwO0lR2ijSwBvPMYyXRAPT+liIAhuBavluKGgtA== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -2291,9 +2523,9 @@ json5@^2.2.3: integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== katex@^0.16.0: - version "0.16.20" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.20.tgz#75c741ded0f7ee8d896a1d31bac307e61af863c3" - integrity sha512-jjuLaMGD/7P8jUTpdKhA9IoqnH+yMFB3sdAFtq5QdAqeP2PjiSbnC3EaguKPNtv6dXXanHxp1ckwvF4a86LBig== + version "0.16.21" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.21.tgz#8f63c659e931b210139691f2cc7bb35166b792a3" + integrity sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A== dependencies: commander "^8.3.0" @@ -2374,9 +2606,9 @@ lru-cache@^5.1.1: yallist "^3.0.2" lucide-react@^0.471.1: - version "0.471.1" - resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.471.1.tgz#16f29cd65c7c847eceab0bbf8592443104423249" - integrity sha512-syOxwPhf62gg2YOsz72HRn+CIpeudFy67AeKnSR8Hn/fIIF4ubhNbRF+pQ2CaJrl+X9Os4PL87z2DXQi3DVeDA== + version "0.471.2" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.471.2.tgz#817ead897ea630e982cb45e3429ee7f786dc3acb" + integrity sha512-A8fDycQxGeaSOTaI7Bm4fg8LBXO7Qr9ORAX47bDRvugCsjLIliugQO0PkKFoeAD57LIQwlWKd3NIQ3J7hYp84g== markdown-extensions@^2.0.0: version "2.0.0" @@ -2388,6 +2620,11 @@ markdown-table@^3.0.0: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdast-util-find-and-replace@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" @@ -2428,9 +2665,9 @@ mdast-util-gfm-autolink-literal@^2.0.0: micromark-util-character "^2.0.0" mdast-util-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" - integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" + integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== dependencies: "@types/mdast" "^4.0.0" devlop "^1.1.0" @@ -2469,9 +2706,9 @@ mdast-util-gfm-task-list-item@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" - integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" + integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== dependencies: mdast-util-from-markdown "^2.0.0" mdast-util-gfm-autolink-literal "^2.0.0" @@ -2606,9 +2843,9 @@ merge2@^1.3.0: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromark-core-commonmark@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" - integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== dependencies: decode-named-character-reference "^1.0.0" devlop "^1.0.0" @@ -2664,9 +2901,9 @@ micromark-extension-gfm-strikethrough@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-table@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz#5cadedfbb29fca7abf752447967003dc3b6583c9" - integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" + integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -2720,9 +2957,9 @@ micromark-extension-math@^3.0.0: micromark-util-types "^2.0.0" micromark-extension-mdx-expression@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a" - integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== + version "3.0.1" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz#43d058d999532fb3041195a3c3c05c46fa84543b" + integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== dependencies: "@types/estree" "^1.0.0" devlop "^1.0.0" @@ -2734,11 +2971,10 @@ micromark-extension-mdx-expression@^3.0.0: micromark-util-types "^2.0.0" micromark-extension-mdx-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz#5abb83da5ddc8e473a374453e6ea56fbd66b59ad" - integrity sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz#ffc98bdb649798902fa9fc5689f67f9c1c902044" + integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ== dependencies: - "@types/acorn" "^4.0.0" "@types/estree" "^1.0.0" devlop "^1.0.0" estree-util-is-identifier-name "^3.0.0" @@ -2806,9 +3042,9 @@ micromark-factory-label@^2.0.0: micromark-util-types "^2.0.0" micromark-factory-mdx-expression@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz#2afaa8ba6d5f63e0cead3e4dee643cad184ca260" - integrity sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz#bb09988610589c07d1c1e4425285895041b3dfa9" + integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== dependencies: "@types/estree" "^1.0.0" devlop "^1.0.0" @@ -2903,11 +3139,10 @@ micromark-util-encode@^2.0.0: integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== micromark-util-events-to-acorn@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07" - integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz#e7a8a6b55a47e5a06c720d5a1c4abae8c37c98f3" + integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== dependencies: - "@types/acorn" "^4.0.0" "@types/estree" "^1.0.0" "@types/unist" "^3.0.0" devlop "^1.0.0" @@ -2945,9 +3180,9 @@ micromark-util-sanitize-uri@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-subtokenize@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz#70ffb99a454bd8c913c8b709c3dc97baefb65f96" - integrity sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -2960,14 +3195,14 @@ micromark-util-symbol@^2.0.0: integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== micromark-util-types@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" - integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== micromark@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" - integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== dependencies: "@types/debug" "^4.0.0" debug "^4.0.0" @@ -3027,9 +3262,9 @@ minimatch@^9.0.4: integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== moment-timezone@^0.5.46: - version "0.5.46" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.46.tgz#a21aa6392b3c6b3ed916cd5e95858a28d893704a" - integrity sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw== + version "0.5.48" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967" + integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw== dependencies: moment "^2.29.4" @@ -3038,17 +3273,17 @@ moment@^2.29.4: resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -motion-dom@^11.16.4: - version "11.16.4" - resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-11.16.4.tgz#7c18dbe8f8b0d4210a89992cda30f5926f003777" - integrity sha512-2wuCie206pCiP2K23uvwJeci4pMFfyQKpWI0Vy6HrCTDzDCer4TsYtT7IVnuGbDeoIV37UuZiUr6SZMHEc1Vww== +motion-dom@^11.18.1: + version "11.18.1" + resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-11.18.1.tgz#e7fed7b7dc6ae1223ef1cce29ee54bec826dc3f2" + integrity sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw== dependencies: - motion-utils "^11.16.0" + motion-utils "^11.18.1" -motion-utils@^11.16.0: - version "11.16.0" - resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-11.16.0.tgz#e75865442278be49e411ca9105c9139edc572811" - integrity sha512-ngdWPjg31rD4WGXFi0eZ00DQQqKKu04QExyv/ymlC+3k+WIgYVFbt6gS5JsFPbJODTF/r8XiE/X+SsoT9c0ocw== +motion-utils@^11.18.1: + version "11.18.1" + resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-11.18.1.tgz#671227669833e991c55813cf337899f41327db5b" + integrity sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA== ms@^2.1.3: version "2.1.3" @@ -3064,10 +3299,10 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.3.7, nanoid@^3.3.8: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== +nanoid@^3.3.8: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== natural-compare@^1.4.0: version "1.4.0" @@ -3099,10 +3334,10 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -oniguruma-to-es@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-2.1.0.tgz#3a993949aa3247b748e5eb6b4800d7bdc6c22005" - integrity sha512-Iq/949c5IueVC5gQR7OYXs0uHsDIePcgZFlVRIVGfQcWwbKG+nsyWfthswdytShlRdkZADY+bWSi+BRyUL81gA== +oniguruma-to-es@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-2.3.0.tgz#35ea9104649b7c05f3963c6b3b474d964625028b" + integrity sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g== dependencies: emoji-regex-xs "^1.0.0" regex "^5.1.1" @@ -3194,7 +3429,7 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.1: +picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -3215,9 +3450,9 @@ pify@^2.3.0: integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== postcss-import@^15.1.0: version "15.1.0" @@ -3271,24 +3506,15 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.47, postcss@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" - integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== +postcss@^8.4.47, postcss@^8.5.1, postcss@^8.5.3: + version "8.5.3" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== dependencies: nanoid "^3.3.8" picocolors "^1.1.1" source-map-js "^1.2.1" -postcss@^8.4.49: - version "8.4.49" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" - integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.1" - source-map-js "^1.2.1" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -3299,6 +3525,11 @@ property-information@^6.0.0: resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== +property-information@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.0.0.tgz#3508a6d6b0b8eb3ca6eb2c6623b164d2ed2ab112" + integrity sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -3314,13 +3545,13 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-dom@^18.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.2" + scheduler "^0.23.0" react-refresh@^0.14.2: version "0.14.2" @@ -3335,35 +3566,33 @@ react-remove-scroll-bar@^2.3.7: react-style-singleton "^2.2.2" tslib "^2.0.0" -react-remove-scroll@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.2.tgz#2518d2c5112e71ea8928f1082a58459b5c7a2a97" - integrity sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw== +react-remove-scroll@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz#df02cde56d5f2731e058531f8ffd7f9adec91ac2" + integrity sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ== dependencies: react-remove-scroll-bar "^2.3.7" - react-style-singleton "^2.2.1" + react-style-singleton "^2.2.3" tslib "^2.1.0" use-callback-ref "^1.3.3" - use-sidecar "^1.1.2" + use-sidecar "^1.1.3" -react-router-dom@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.1.2.tgz#ff6ddeb6b119b1bbea69a7f3a309c414f69693ad" - integrity sha512-kE7JdrDfeWO/2d6RPucLmqp2UL8Isv1VWtI5MQyYNA99KtncqxWDL6550+0rH4fboJKJbXRcyjRnIRT/gkxTcA== +react-router-dom@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" + integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== dependencies: - react-router "7.1.2" + history "^5.2.0" + react-router "6.3.0" -react-router@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.1.2.tgz#61bf043b7fc839f2cfc80e64ed7ca9072526bfd2" - integrity sha512-KeallSO30KLpIe/ZZqfk6pCJ1c+5JhMxl3SCS3Zx1LgaGuQbgLDmjuNi6KZ5LnAV9sWjbmBWGRw8Um/Pw6BExg== +react-router@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" + integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== dependencies: - "@types/cookie" "^0.6.0" - cookie "^1.0.1" - set-cookie-parser "^2.6.0" - turbo-stream "2.4.0" + history "^5.2.0" -react-style-singleton@^2.2.1, react-style-singleton@^2.2.2: +react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== @@ -3371,10 +3600,10 @@ react-style-singleton@^2.2.1, react-style-singleton@^2.2.2: get-nonce "^1.0.0" tslib "^2.0.0" -react@^18.3.1: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" - integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" @@ -3432,6 +3661,11 @@ recma-stringify@^1.0.0: unified "^11.0.0" vfile "^6.0.0" +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regex-recursion@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-5.1.1.tgz#5a73772d18adbf00f57ad097bf54171b39d78f8b" @@ -3475,9 +3709,9 @@ rehype-parse@^9.0.0: unified "^11.0.0" rehype-pretty-code@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/rehype-pretty-code/-/rehype-pretty-code-0.14.0.tgz#bdf828af4575737cc02204fb24d8097e6f010d37" - integrity sha512-hBeKF/Wkkf3zyUS8lal9RCUuhypDWLQc+h9UrP9Pav25FUm/AQAVh4m5gdvJxh4Oz+U+xKvdsV01p1LdvsZTiQ== + version "0.14.1" + resolved "https://registry.yarnpkg.com/rehype-pretty-code/-/rehype-pretty-code-0.14.1.tgz#603d2ddccb11f1cf95e42a10b37b842beb8ad78e" + integrity sha512-IpG4OL0iYlbx78muVldsK86hdfNoht0z63AP7sekQNW2QOTmjxB7RbTO+rhIYNGRljgHxgVZoPwUl6bIC9SbjA== dependencies: "@types/hast" "^3.0.4" hast-util-to-string "^3.0.0" @@ -3525,9 +3759,9 @@ remark-breaks@^4.0.0: unified "^11.0.0" remark-gfm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" - integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" + integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== dependencies: "@types/mdast" "^4.0.0" mdast-util-gfm "^3.0.0" @@ -3565,9 +3799,9 @@ remark-parse@^11.0.0: unified "^11.0.0" remark-rehype@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" - integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== + version "11.1.2" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" + integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -3599,36 +3833,37 @@ resolve@^1.1.7, resolve@^1.22.8: supports-preserve-symlinks-flag "^1.0.0" reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rollup@^4.23.0: - version "4.30.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.30.1.tgz#d5c3d066055259366cdc3eb6f1d051c5d6afaf74" - integrity sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w== +rollup@^4.30.1: + version "4.39.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.39.0.tgz#9dc1013b70c0e2cb70ef28350142e9b81b3f640c" + integrity sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g== dependencies: - "@types/estree" "1.0.6" + "@types/estree" "1.0.7" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.30.1" - "@rollup/rollup-android-arm64" "4.30.1" - "@rollup/rollup-darwin-arm64" "4.30.1" - "@rollup/rollup-darwin-x64" "4.30.1" - "@rollup/rollup-freebsd-arm64" "4.30.1" - "@rollup/rollup-freebsd-x64" "4.30.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.30.1" - "@rollup/rollup-linux-arm-musleabihf" "4.30.1" - "@rollup/rollup-linux-arm64-gnu" "4.30.1" - "@rollup/rollup-linux-arm64-musl" "4.30.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.30.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.30.1" - "@rollup/rollup-linux-riscv64-gnu" "4.30.1" - "@rollup/rollup-linux-s390x-gnu" "4.30.1" - "@rollup/rollup-linux-x64-gnu" "4.30.1" - "@rollup/rollup-linux-x64-musl" "4.30.1" - "@rollup/rollup-win32-arm64-msvc" "4.30.1" - "@rollup/rollup-win32-ia32-msvc" "4.30.1" - "@rollup/rollup-win32-x64-msvc" "4.30.1" + "@rollup/rollup-android-arm-eabi" "4.39.0" + "@rollup/rollup-android-arm64" "4.39.0" + "@rollup/rollup-darwin-arm64" "4.39.0" + "@rollup/rollup-darwin-x64" "4.39.0" + "@rollup/rollup-freebsd-arm64" "4.39.0" + "@rollup/rollup-freebsd-x64" "4.39.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.39.0" + "@rollup/rollup-linux-arm-musleabihf" "4.39.0" + "@rollup/rollup-linux-arm64-gnu" "4.39.0" + "@rollup/rollup-linux-arm64-musl" "4.39.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.39.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.39.0" + "@rollup/rollup-linux-riscv64-gnu" "4.39.0" + "@rollup/rollup-linux-riscv64-musl" "4.39.0" + "@rollup/rollup-linux-s390x-gnu" "4.39.0" + "@rollup/rollup-linux-x64-gnu" "4.39.0" + "@rollup/rollup-linux-x64-musl" "4.39.0" + "@rollup/rollup-win32-arm64-msvc" "4.39.0" + "@rollup/rollup-win32-ia32-msvc" "4.39.0" + "@rollup/rollup-win32-x64-msvc" "4.39.0" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -3638,7 +3873,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -scheduler@^0.23.2: +scheduler@^0.23.0: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== @@ -3650,11 +3885,6 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -set-cookie-parser@^2.6.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" - integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -3668,16 +3898,16 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shiki@^1.27.2: - version "1.27.2" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.27.2.tgz#d716cfb435c177e4223e9f1d6e0cfdff0be9bd07" - integrity sha512-QtA1C41oEVixKog+V8I3ia7jjGls7oCZ8Yul8vdHrVBga5uPoyTtMvFF4lMMXIyAZo5A5QbXq91bot2vA6Q+eQ== - dependencies: - "@shikijs/core" "1.27.2" - "@shikijs/engine-javascript" "1.27.2" - "@shikijs/engine-oniguruma" "1.27.2" - "@shikijs/langs" "1.27.2" - "@shikijs/themes" "1.27.2" - "@shikijs/types" "1.27.2" + version "1.29.2" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.29.2.tgz#5c93771f2d5305ce9c05975c33689116a27dc657" + integrity sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg== + dependencies: + "@shikijs/core" "1.29.2" + "@shikijs/engine-javascript" "1.29.2" + "@shikijs/engine-oniguruma" "1.29.2" + "@shikijs/langs" "1.29.2" + "@shikijs/themes" "1.29.2" + "@shikijs/types" "1.29.2" "@shikijs/vscode-textmate" "^10.0.1" "@types/hast" "^3.0.4" @@ -3766,7 +3996,14 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-to-object@^1.0.0: +style-to-js@^1.0.0: + version "1.1.16" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.16.tgz#e6bd6cd29e250bcf8fa5e6591d07ced7575dbe7a" + integrity sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw== + dependencies: + style-to-object "1.0.8" + +style-to-object@1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== @@ -3798,10 +4035,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -swr@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.3.0.tgz#66fa45023efd4199f4e7ce608c255709a135943d" - integrity sha512-NyZ76wA4yElZWBHzSgEJc28a0u6QZvhb6w0azeL2k7+Q1gAzVK+IqQYXhVOC/mzi+HZIozrZvBVeSeOZNR2bqA== +swr@^2.3.0, swr@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/swr/-/swr-2.3.3.tgz#9d6a703355f15f9099f45114db3ef75764444788" + integrity sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A== dependencies: dequal "^2.0.3" use-sync-external-store "^1.4.0" @@ -3866,9 +4103,9 @@ thenify-all@^1.0.0: any-promise "^1.0.0" timeago-react@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/timeago-react/-/timeago-react-3.0.6.tgz#d1b55af67ed21b1c5429b9ba8043d0d0f7dab295" - integrity sha512-4ywnCX3iFjdp84WPK7gt8s4n0FxXbYM+xv8hYL73p83dpcMxzmO+0W4xJuxflnkWNvum5aEaqTe6LZ3lUIudjQ== + version "3.0.7" + resolved "https://registry.yarnpkg.com/timeago-react/-/timeago-react-3.0.7.tgz#5c6c79e928b8896a3bfb491dfc3fd3d461d17eca" + integrity sha512-5LSQuq+mzfEpMHkJQgMWnOs27dGh25aUQhffQpAW6q431vVVmHP194KYsM4bhzli0XfohUgN8+r3Pq6GVprN4A== dependencies: timeago.js "^4.0.0" @@ -3904,11 +4141,6 @@ tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -turbo-stream@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/turbo-stream/-/turbo-stream-2.4.0.tgz#1e4fca6725e90fa14ac4adb782f2d3759a5695f0" - integrity sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -3921,11 +4153,6 @@ typescript@~5.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - unified@^11.0.0, unified@^11.0.5: version "11.0.5" resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" @@ -4001,9 +4228,9 @@ unist-util-visit@^5.0.0: unist-util-visit-parents "^6.0.0" update-browserslist-db@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" - integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -4022,7 +4249,7 @@ use-callback-ref@^1.3.3: dependencies: tslib "^2.0.0" -use-sidecar@^1.1.2: +use-sidecar@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== @@ -4031,9 +4258,9 @@ use-sidecar@^1.1.2: tslib "^2.0.0" use-sync-external-store@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" - integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== util-deprecate@^1.0.2: version "1.0.2" @@ -4065,13 +4292,13 @@ vfile@^6.0.0: vfile-message "^4.0.0" vite@^6.0.5: - version "6.0.7" - resolved "https://registry.yarnpkg.com/vite/-/vite-6.0.7.tgz#f0f8c120733b04af52b4a1e3e7cb54eb851a799b" - integrity sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ== + version "6.2.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.2.5.tgz#d093b5fe8eb96e594761584a966ab13f24457820" + integrity sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA== dependencies: - esbuild "^0.24.2" - postcss "^8.4.49" - rollup "^4.23.0" + esbuild "^0.25.0" + postcss "^8.5.3" + rollup "^4.30.1" optionalDependencies: fsevents "~2.3.3" @@ -4126,9 +4353,9 @@ yallist@^3.0.2: integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^2.3.4: - version "2.7.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + version "2.7.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6" + integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== yocto-queue@^0.1.0: version "0.1.0" diff --git a/pyproject.toml b/pyproject.toml index b802cea..460fdeb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,4 +11,4 @@ dependencies = [ "GitPython", "openai", "pyppeteer", -] \ No newline at end of file +] diff --git a/requirements.txt b/requirements.txt index a85731b..f3956cd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ # frappe -- https://github.com/frappe/frappe is installed via 'bench init' -GitPython \ No newline at end of file +GitPython diff --git a/setup.py b/setup.py index 487e787..bcc5034 100644 --- a/setup.py +++ b/setup.py @@ -1,19 +1,19 @@ -from setuptools import setup, find_packages +from setuptools import find_packages, setup with open("requirements.txt") as f: - install_requires = f.read().strip().split("\n") + install_requires = f.read().strip().split("\n") # get version from __version__ variable in commit/__init__.py from commit import __version__ as version setup( - name="commit", - version=version, - description="The Commit Company", - author="The Commit Company", - author_email="yash.jane@thecommit.company", - packages=find_packages(), - zip_safe=False, - include_package_data=True, - install_requires=install_requires + name="commit", + version=version, + description="The Commit Company", + author="The Commit Company", + author_email="sumit.jain@thecommit.company", + packages=find_packages(), + zip_safe=False, + include_package_data=True, + install_requires=install_requires, ) diff --git a/yarn.lock b/yarn.lock index fb57ccd..4a58018 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,4 +1,2 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 - -