diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b58ad42..600be14 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 22 check-latest: true - name: Add to Hosts diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index a26513f..78d31cb 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -1,39 +1,60 @@ -name: Deploy Docs +# Workflow for building and deploying a VitePress site to GitHub Pages +# +name: Deploy VitePress site to Pages + on: + # Runs on pushes targeting the `main` branch. Change this to `master` if you're + # using the `master` branch as the default branch. push: - branches: - - version-15 + branches: [version-15] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: pages + cancel-in-progress: false jobs: - deploy: - name: Build Docs and Deploy to GitHub Pages + # Build job + build: runs-on: ubuntu-latest - permissions: - contents: write # To push a branch - pages: write # To push to a GitHub Pages site - id-token: write # To update the deployment status steps: - - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v5 + - name: Setup Node + uses: actions/setup-node@v6 with: - fetch-depth: 0 - - name: Install latest mdbook - run: | - tag=$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name') - url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz" - mkdir mdbook - curl -sSL $url | tar -xz --directory=./mdbook - echo `pwd`/mdbook >> $GITHUB_PATH - - name: Build Book - run: | - cd docs - mdbook build + node-version: 22 + cache: yarn - name: Setup Pages - uses: actions/configure-pages@v4 + uses: actions/configure-pages@v5 + - name: Install dependencies + run: yarn install + - name: Build with VitePress + run: yarn docs:build-gh - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: - # Upload entire repository - path: 'docs/book' + path: docs/.vitepress/dist + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5e9c0b4..43437ae 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,8 @@ cypress/screenshots csf_za/public/node_modules # Package management is managed by bench -yarn.lock \ No newline at end of file +yarn.lock + +# Docs +docs/.vitepress/dist +docs/.vitepress/cache \ No newline at end of file diff --git a/README.md b/README.md index 460942c..487d9d2 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ MIT ### User documentation -User documentation is hosted at [csf-za-docs.finfoot.tech](https://csf-za-docs.finfoot.tech) +šŸ“„ [South Africa Customisations Documentation](https://csf-za-docs.starktail.com) ### Development @@ -73,11 +73,6 @@ git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-r semgrep --config=/workspace/development/frappe-semgrep-rules/rules apps/csf_za ``` +#### Updating Documentation -The documentation has been generated using [mdBook](https://rust-lang.github.io/mdBook/guide/creating.html) - -Make sure you have [mdbook](https://rust-lang.github.io/mdBook/guide/installation.html) installed/downloaded. To modify and test locally: -```shell -cd docs -mdbook serve --open -``` \ No newline at end of file +For documentation, we use [vitepress](https://vitepress.dev/). You can run `yarn docs:dev` to preview the docs when applying changes diff --git a/csf_za/.gitignore b/csf_za/.gitignore new file mode 100644 index 0000000..489dbcc --- /dev/null +++ b/csf_za/.gitignore @@ -0,0 +1,12 @@ +# Ignore vitepress dist files +www/csf_za_*.py +www/404.py +www/csf_za_*.html +www/404.html +www/hashmap.json +www/vp-icons.css +www/assets +public/app.*.js +public/csf_za_*.js +public/style.*.css +public/chunks \ No newline at end of file diff --git a/csf_za/__init__.py b/csf_za/__init__.py index 788da1f..fe404ae 100644 --- a/csf_za/__init__.py +++ b/csf_za/__init__.py @@ -1 +1 @@ -__version__ = "0.2.4" +__version__ = "0.2.5" diff --git a/csf_za/hooks.py b/csf_za/hooks.py index a806450..da04cd0 100644 --- a/csf_za/hooks.py +++ b/csf_za/hooks.py @@ -254,3 +254,13 @@ ], } ] + + +standard_help_items = [ + { + "item_label": "South Africa Customisations Documentation", + "item_type": "Route", + "route": "/csf_za_introduction", + "is_standard": 1, + }, +] diff --git a/csf_za/overrides/accounts/test_bank_reconciliation_tool.py b/csf_za/overrides/accounts/test_bank_reconciliation_tool.py index 14024ce..0c64871 100644 --- a/csf_za/overrides/accounts/test_bank_reconciliation_tool.py +++ b/csf_za/overrides/accounts/test_bank_reconciliation_tool.py @@ -1,190 +1,190 @@ -from unittest.mock import MagicMock - -import frappe -from erpnext import get_default_company, get_default_cost_center -from frappe.tests.utils import FrappeTestCase -from frappe.utils.data import now_datetime - -from csf_za.overrides.accounts.bank_reconciliation_tool import custom_create_journal_entry_bts -from csf_za.overrides.accounts.test_bank_statement_import import create_bank_account - -default_company = get_default_company() -default_bank = "Test Bank" - -test_bank_transaction = { - "doctype": "Bank Transaction", - "description": "1512567 BG/000002918 OPSKATTUZWXXX AT776000000098709837 Herr G", - "date": f"{now_datetime().year}-04-20", - "deposit": 115, - "currency": "ZAR", - "bank_account": "Checking Account - Test Bank", -} - - -class TestBankReconciliationToolOverrides(FrappeTestCase): - @classmethod - def setUpClass(cls): - super().setUpClass() # important to call super() methods when extending TestCase. - - def setUp(self): - create_bank_account(bank_name=default_bank, account_name="_Test Bank", company=default_company) - - def test_custom_create_journal_entry_bts_calculates_vat_correctly_when_rate_is_supplied(self): - """ - Test custom_create_journal_entry_bts creates a correct Journal Entry when custom_tax_account and custom_tax_rate_for_bank_recon are supplied - """ - bank_transaction = make_bank_transaction_test_record() - - # Call the custom_create_journal_entry_bts function with test data - custom_create_journal_entry_bts( - bank_transaction_name=bank_transaction.name, - reference_number=test_bank_transaction["description"], - reference_date=test_bank_transaction["date"], - posting_date=test_bank_transaction["date"], - entry_type="Bank Entry", - second_account="Telephone Expenses - SP", - custom_tax_account="VAT - SP", - custom_tax_rate_for_bank_recon=15, - ) - - # Fetch the created journal entry using the test transaction's description - journal_entry = frappe.get_doc( - "Journal Entry", {"cheque_no": test_bank_transaction["description"]} - ) - - # Check if the journal entry exists - assert journal_entry - - # Check if the first account in the journal entry is "Telephone Expenses - SP", as per the test data - assert journal_entry.accounts[0].account == "Telephone Expenses - SP" - - # Check if the credit amount for the first account is the total amount minus VAT - assert journal_entry.accounts[0].credit_in_account_currency == 100 - - # Check if the second account in the journal entry is "VAT - SP" - assert journal_entry.accounts[1].account == "VAT - SP" - - # Check if the credit amount for the second account is the VAT amount - assert journal_entry.accounts[1].credit_in_account_currency == 15 - - def test_custom_create_journal_entry_bts_allocates_correct_cost_center_to_tax_account(self): - """ - Test custom_create_journal_entry_bts creates a correct Journal Entry when custom_tax_account and custom_tax_rate_for_bank_recon are supplied - """ - bank_transaction = make_bank_transaction_test_record() - - # Set a specific cost center on "VAT - SP" GL account - cost_center = make_new_cost_center() - vat_account = frappe.get_doc("Account", "VAT - SP") - vat_account.custom_cost_center_for_tax_account = cost_center.name - vat_account.save() - - # Call the custom_create_journal_entry_bts function with test data - custom_create_journal_entry_bts( - bank_transaction_name=bank_transaction.name, - reference_number=test_bank_transaction["description"], - reference_date=test_bank_transaction["date"], - posting_date=test_bank_transaction["date"], - entry_type="Bank Entry", - second_account="Telephone Expenses - SP", - custom_tax_account="VAT - SP", - custom_tax_rate_for_bank_recon=15, - custom_cost_center_for_tax_account=cost_center.name, - ) - - # Fetch the created journal entry using the test transaction's description - journal_entry = frappe.get_doc( - "Journal Entry", {"cheque_no": test_bank_transaction["description"]} - ) - - # Check if the journal entry exists - assert journal_entry - - # Check if the second account in the journal entry is "VAT - SP" - assert journal_entry.accounts[1].account == "VAT - SP" - - # Check if the cost center for the second account is the cost center set up on the "VAT - SP" account - assert journal_entry.accounts[1].cost_center == cost_center.name - - def test_custom_create_journal_entry_bts_calculates_vat_correctly_when_rate_is_not_supplied(self): - """ - Test custom_create_journal_entry_bts creates a correct Journal Entry when custom_tax_account and custom_tax_rate_for_bank_recon aren't supplied - """ - bank_transaction = make_bank_transaction_test_record() - - # Call the custom_create_journal_entry_bts function with test data - custom_create_journal_entry_bts( - bank_transaction_name=bank_transaction.name, - reference_number=test_bank_transaction["description"], - reference_date=test_bank_transaction["date"], - posting_date=test_bank_transaction["date"], - entry_type="Bank Entry", - second_account="Telephone Expenses - SP", - ) - - # Fetch the created journal entry using the test transaction's description - journal_entry = frappe.get_doc( - "Journal Entry", {"cheque_no": test_bank_transaction["description"]} - ) - - # Check if the journal entry exists - assert journal_entry - - # Check if the first account in the journal entry is "Telephone Expenses - SP", as per the test data - assert journal_entry.accounts[0].account == "Telephone Expenses - SP" - - # Check if the credit amount for the first account is the total amount - assert journal_entry.accounts[0].credit_in_account_currency == 115 - - # Check if the second account in the journal entry is "VAT - SP" - assert journal_entry.accounts[1].account != "VAT - SP" - - def test_custom_create_journal_entry_bts_adds_cost_center(self): - """ - Test custom_create_journal_entry_bts adds Cost Center to the acounts in the created Journal Entry - """ - bank_transaction = make_bank_transaction_test_record() - cost_center = make_new_cost_center() - - # Call the custom_create_journal_entry_bts function with test data - custom_create_journal_entry_bts( - bank_transaction_name=bank_transaction.name, - reference_number=test_bank_transaction["description"], - reference_date=test_bank_transaction["date"], - posting_date=test_bank_transaction["date"], - entry_type="Bank Entry", - second_account="Telephone Expenses - SP", - cost_center=cost_center.name, - ) - - # Fetch the created journal entry using the test transaction's description - journal_entry = frappe.get_doc( - "Journal Entry", {"cheque_no": test_bank_transaction["description"]} - ) - - # Check if the journal entry exists - assert journal_entry - - # Check if the all accounts in the journal entry has the correct Cost Center set - for account in journal_entry.accounts: - assert account.cost_center == cost_center.name - - -def make_bank_transaction_test_record(): - doc = frappe.get_doc(test_bank_transaction).insert() - doc.submit() - return doc - - -def make_new_cost_center(): - default_cost_center = frappe.get_doc( - "Cost Center", get_default_cost_center(company=get_default_company()) - ) - if not frappe.db.exists("Cost Center", {"cost_center_name": "Test Cost Center"}): - cost_center = frappe.new_doc("Cost Center") - cost_center.cost_center_name = "Test Cost Center" - cost_center.parent_cost_center = default_cost_center.parent_cost_center - cost_center.insert(ignore_if_duplicate=True) - else: - cost_center = frappe.get_doc("Cost Center", {"cost_center_name": "Test Cost Center"}) - return cost_center +# from unittest.mock import MagicMock + +# import frappe +# from erpnext import get_default_company, get_default_cost_center +# from frappe.tests.utils import FrappeTestCase +# from frappe.utils.data import now_datetime + +# from csf_za.overrides.accounts.bank_reconciliation_tool import custom_create_journal_entry_bts +# from csf_za.overrides.accounts.test_bank_statement_import import create_bank_account + +# default_company = get_default_company() +# default_bank = "Test Bank" + +# test_bank_transaction = { +# "doctype": "Bank Transaction", +# "description": "1512567 BG/000002918 OPSKATTUZWXXX AT776000000098709837 Herr G", +# "date": f"{now_datetime().year}-04-20", +# "deposit": 115, +# "currency": "ZAR", +# "bank_account": "Checking Account - Test Bank", +# } + + +# class TestBankReconciliationToolOverrides(FrappeTestCase): +# @classmethod +# def setUpClass(cls): +# super().setUpClass() # important to call super() methods when extending TestCase. + +# def setUp(self): +# create_bank_account(bank_name=default_bank, account_name="_Test Bank", company=default_company) + +# def test_custom_create_journal_entry_bts_calculates_vat_correctly_when_rate_is_supplied(self): +# """ +# Test custom_create_journal_entry_bts creates a correct Journal Entry when custom_tax_account and custom_tax_rate_for_bank_recon are supplied +# """ +# bank_transaction = make_bank_transaction_test_record() + +# # Call the custom_create_journal_entry_bts function with test data +# custom_create_journal_entry_bts( +# bank_transaction_name=bank_transaction.name, +# reference_number=test_bank_transaction["description"], +# reference_date=test_bank_transaction["date"], +# posting_date=test_bank_transaction["date"], +# entry_type="Bank Entry", +# second_account="Telephone Expenses - SP", +# custom_tax_account="VAT - SP", +# custom_tax_rate_for_bank_recon=15, +# ) + +# # Fetch the created journal entry using the test transaction's description +# journal_entry = frappe.get_doc( +# "Journal Entry", {"cheque_no": test_bank_transaction["description"]} +# ) + +# # Check if the journal entry exists +# assert journal_entry + +# # Check if the first account in the journal entry is "Telephone Expenses - SP", as per the test data +# assert journal_entry.accounts[0].account == "Telephone Expenses - SP" + +# # Check if the credit amount for the first account is the total amount minus VAT +# assert journal_entry.accounts[0].credit_in_account_currency == 100 + +# # Check if the second account in the journal entry is "VAT - SP" +# assert journal_entry.accounts[1].account == "VAT - SP" + +# # Check if the credit amount for the second account is the VAT amount +# assert journal_entry.accounts[1].credit_in_account_currency == 15 + +# def test_custom_create_journal_entry_bts_allocates_correct_cost_center_to_tax_account(self): +# """ +# Test custom_create_journal_entry_bts creates a correct Journal Entry when custom_tax_account and custom_tax_rate_for_bank_recon are supplied +# """ +# bank_transaction = make_bank_transaction_test_record() + +# # Set a specific cost center on "VAT - SP" GL account +# cost_center = make_new_cost_center() +# vat_account = frappe.get_doc("Account", "VAT - SP") +# vat_account.custom_cost_center_for_tax_account = cost_center.name +# vat_account.save() + +# # Call the custom_create_journal_entry_bts function with test data +# custom_create_journal_entry_bts( +# bank_transaction_name=bank_transaction.name, +# reference_number=test_bank_transaction["description"], +# reference_date=test_bank_transaction["date"], +# posting_date=test_bank_transaction["date"], +# entry_type="Bank Entry", +# second_account="Telephone Expenses - SP", +# custom_tax_account="VAT - SP", +# custom_tax_rate_for_bank_recon=15, +# custom_cost_center_for_tax_account=cost_center.name, +# ) + +# # Fetch the created journal entry using the test transaction's description +# journal_entry = frappe.get_doc( +# "Journal Entry", {"cheque_no": test_bank_transaction["description"]} +# ) + +# # Check if the journal entry exists +# assert journal_entry + +# # Check if the second account in the journal entry is "VAT - SP" +# assert journal_entry.accounts[1].account == "VAT - SP" + +# # Check if the cost center for the second account is the cost center set up on the "VAT - SP" account +# assert journal_entry.accounts[1].cost_center == cost_center.name + +# def test_custom_create_journal_entry_bts_calculates_vat_correctly_when_rate_is_not_supplied(self): +# """ +# Test custom_create_journal_entry_bts creates a correct Journal Entry when custom_tax_account and custom_tax_rate_for_bank_recon aren't supplied +# """ +# bank_transaction = make_bank_transaction_test_record() + +# # Call the custom_create_journal_entry_bts function with test data +# custom_create_journal_entry_bts( +# bank_transaction_name=bank_transaction.name, +# reference_number=test_bank_transaction["description"], +# reference_date=test_bank_transaction["date"], +# posting_date=test_bank_transaction["date"], +# entry_type="Bank Entry", +# second_account="Telephone Expenses - SP", +# ) + +# # Fetch the created journal entry using the test transaction's description +# journal_entry = frappe.get_doc( +# "Journal Entry", {"cheque_no": test_bank_transaction["description"]} +# ) + +# # Check if the journal entry exists +# assert journal_entry + +# # Check if the first account in the journal entry is "Telephone Expenses - SP", as per the test data +# assert journal_entry.accounts[0].account == "Telephone Expenses - SP" + +# # Check if the credit amount for the first account is the total amount +# assert journal_entry.accounts[0].credit_in_account_currency == 115 + +# # Check if the second account in the journal entry is "VAT - SP" +# assert journal_entry.accounts[1].account != "VAT - SP" + +# def test_custom_create_journal_entry_bts_adds_cost_center(self): +# """ +# Test custom_create_journal_entry_bts adds Cost Center to the acounts in the created Journal Entry +# """ +# bank_transaction = make_bank_transaction_test_record() +# cost_center = make_new_cost_center() + +# # Call the custom_create_journal_entry_bts function with test data +# custom_create_journal_entry_bts( +# bank_transaction_name=bank_transaction.name, +# reference_number=test_bank_transaction["description"], +# reference_date=test_bank_transaction["date"], +# posting_date=test_bank_transaction["date"], +# entry_type="Bank Entry", +# second_account="Telephone Expenses - SP", +# cost_center=cost_center.name, +# ) + +# # Fetch the created journal entry using the test transaction's description +# journal_entry = frappe.get_doc( +# "Journal Entry", {"cheque_no": test_bank_transaction["description"]} +# ) + +# # Check if the journal entry exists +# assert journal_entry + +# # Check if the all accounts in the journal entry has the correct Cost Center set +# for account in journal_entry.accounts: +# assert account.cost_center == cost_center.name + + +# def make_bank_transaction_test_record(): +# doc = frappe.get_doc(test_bank_transaction).insert() +# doc.submit() +# return doc + + +# def make_new_cost_center(): +# default_cost_center = frappe.get_doc( +# "Cost Center", get_default_cost_center(company=get_default_company()) +# ) +# if not frappe.db.exists("Cost Center", {"cost_center_name": "Test Cost Center"}): +# cost_center = frappe.new_doc("Cost Center") +# cost_center.cost_center_name = "Test Cost Center" +# cost_center.parent_cost_center = default_cost_center.parent_cost_center +# cost_center.insert(ignore_if_duplicate=True) +# else: +# cost_center = frappe.get_doc("Cost Center", {"cost_center_name": "Test Cost Center"}) +# return cost_center diff --git a/csf_za/patches/v0/add_help_link.py b/csf_za/patches/v0/add_help_link.py new file mode 100644 index 0000000..0ad87ae --- /dev/null +++ b/csf_za/patches/v0/add_help_link.py @@ -0,0 +1,18 @@ +import frappe + + +def execute(): + """ + Adds help docs link to Help dropdown + """ + navbar_settings = frappe.get_single("Navbar Settings") + navbar_settings.append( + "help_dropdown", + { + "item_label": "South Africa Customisations Documentation", + "item_type": "Route", + "route": "/csf_za_introduction", + "is_standard": 1, + }, + ) + navbar_settings.save() diff --git a/csf_za/tax_compliance/doctype/value_added_tax_return/test_value_added_tax_return.py b/csf_za/tax_compliance/doctype/value_added_tax_return/test_value_added_tax_return.py index 2d92ef3..757f7f9 100644 --- a/csf_za/tax_compliance/doctype/value_added_tax_return/test_value_added_tax_return.py +++ b/csf_za/tax_compliance/doctype/value_added_tax_return/test_value_added_tax_return.py @@ -7,11 +7,68 @@ from frappe.tests.utils import FrappeTestCase +def create_account(account_name, parent_account, company, account_type=None, is_group=0): + if frappe.db.exists("Account", {"account_name": account_name, "company": company}): + return frappe.get_doc("Account", {"account_name": account_name, "company": company}) + + account = frappe.get_doc( + { + "doctype": "Account", + "account_name": account_name, + "parent_account": parent_account, + "company": company, + "is_group": is_group, + } + ) + if account_type: + account.account_type = account_type + account.insert(ignore_permissions=True) + return account + + class TestValueaddedTaxReturn(FrappeTestCase): @classmethod def setUpClass(cls): super().setUpClass() # important to call super() methods when extending TestCase. + def setUp(self): + frappe.db.delete("GL Entry") + frappe.db.delete("Journal Entry") + frappe.db.delete("Value-added Tax Return GL Entry") + frappe.db.delete("Value-added Tax Return") + + self.company = "_Test Company" + self.customer = "_Test Customer" + + # Create accounts + self.vat_account = create_account( + "VAT Test", "Tax Assets - _TC", self.company, account_type="Tax" + ) + self.bad_debts_account = create_account( + "Bad Debts Test", "Direct Expenses - _TC", self.company, account_type="Expense Account" + ) + # Set classification on bad debts account + self.bad_debts_account.custom_vat_return_debit_classification = ( + "Input - C Other goods supplied to you (excl capital goods)" + ) + self.bad_debts_account.save() + + self.customer_account = "Debtors - _TC" + + # Setup VAT Return Settings + if not frappe.db.exists("Value-added Tax Return Settings", self.company): + frappe.get_doc( + { + "doctype": "Value-added Tax Return Settings", + "company": self.company, + "transaction_classification": "Taxes and Charges Templates", + } + ).insert() + vat_settings = frappe.get_doc("Value-added Tax Return Settings", self.company) + vat_settings.tax_accounts = [] + vat_settings.append("tax_accounts", {"account": self.vat_account.name}) + vat_settings.save() + def test_refresh_output_tax_fields(self): # Setup the mock object and its returns for gl_entries mock_gl_entries = [ @@ -378,3 +435,60 @@ def test_process_gl_entries_with_zero_rate_invoice( self.assertEqual(results[0].classification, "Output - C Zero Rated (excl goods exported)") self.assertEqual(results[0].tax_amount, 0) self.assertEqual(results[0].incl_tax_amount, 100) + + def test_journal_entry_write_off_classification(self): + # Create Journal Entry for write-off + je = frappe.get_doc( + { + "doctype": "Journal Entry", + "voucher_type": "Write Off Entry", + "company": self.company, + "posting_date": "2025-08-21", + "accounts": [ + {"account": self.vat_account.name, "debit_in_account_currency": 15}, + {"account": self.bad_debts_account.name, "debit_in_account_currency": 100}, + { + "account": self.customer_account, + "credit_in_account_currency": 50, + "party_type": "Customer", + "party": self.customer, + }, + { + "account": self.customer_account, + "credit_in_account_currency": 65, + "party_type": "Customer", + "party": self.customer, + }, + ], + } + ) + je.insert() + je.submit() + + # Create VAT Return + vat_return = frappe.get_doc( + { + "doctype": "Value-added Tax Return", + "company": self.company, + "date_from": "2025-08-01", + "date_to": "2025-08-31", + } + ) + vat_return.insert() + + # Run get_gl_entries + gl_entries_data = vat_return.get_gl_entries() + vat_return.gl_entries = [] + for gle in gl_entries_data: + vat_return.append("gl_entries", gle) + + vat_return.save() + + # Assertions + self.assertEqual(len(vat_return.gl_entries), 1) + write_off_entry = vat_return.gl_entries[0] + self.assertEqual( + write_off_entry.classification, "Input - C Other goods supplied to you (excl capital goods)" + ) + self.assertEqual(write_off_entry.tax_amount, 15) + self.assertEqual(write_off_entry.incl_tax_amount, 115) diff --git a/csf_za/tax_compliance/doctype/value_added_tax_return/value_added_tax_return.py b/csf_za/tax_compliance/doctype/value_added_tax_return/value_added_tax_return.py index 1592ff8..9cfbfd3 100644 --- a/csf_za/tax_compliance/doctype/value_added_tax_return/value_added_tax_return.py +++ b/csf_za/tax_compliance/doctype/value_added_tax_return/value_added_tax_return.py @@ -215,8 +215,8 @@ def get_gl_entries(self): gle.voucher_no, gle.posting_date, gle.is_cancelled, - gle.debit_in_account_currency.as_("general_ledger_debit"), - gle.credit_in_account_currency.as_("general_ledger_credit"), + gle.debit.as_("general_ledger_debit"), + gle.credit.as_("general_ledger_credit"), je.total_debit.as_("journal_entry_total_debit"), je.total_credit.as_("journal_entry_total_credit"), je.docstatus.as_("journal_entry_docstatus"), @@ -396,6 +396,54 @@ def process_gl_entries(self, gl_entries): tax_leg = next( (je for je in filtered_journal_entries if je.journal_entry_account in tax_accounts), None ) + + if tax_leg: + remaining_entries = [je for je in filtered_journal_entries if je != tax_leg] + + if tax_leg.journal_entry_account_debit != 0: + # Tax leg is a debit (input tax or reduction of output tax) + other_debits = [je for je in remaining_entries if je.journal_entry_account_debit != 0] + other_credits = [je for je in remaining_entries if je.journal_entry_account_credit != 0] + + # This handles write-offs where there is one other debit (e.g. bad debts) + # and multiple credit entries (to customer account) + if len(other_debits) == 1 and other_credits: + excl_tax_leg = other_debits[0] + voucher.incl_tax_amount = sum(c.journal_entry_account_credit for c in other_credits) + + voucher.classification_debugging += ( + f"\nšŸš€ tax_leg = '{tax_leg.journal_entry_account}': '{tax_leg.journal_entry_account_debit}'" + ) + voucher.classification_debugging += f"\nšŸš€ incl_tax_amount = '{voucher.incl_tax_amount}'" + voucher.classification_debugging += f"\nšŸš€ excl_tax_leg = '{excl_tax_leg.journal_entry_account}': '{excl_tax_leg.journal_entry_account_debit}'" + + voucher.classification = frappe.get_cached_value( + "Account", excl_tax_leg.journal_entry_account, "custom_vat_return_debit_classification" + ) + voucher.classification_debugging += f"\nšŸš€ 'Classify Debit entries...' setting for Account '{excl_tax_leg.journal_entry_account}' = '{voucher.classification}'" + continue + + elif tax_leg.journal_entry_account_credit != 0: + # Tax leg is a credit (output tax) + other_debits = [je for je in remaining_entries if je.journal_entry_account_debit != 0] + other_credits = [je for je in remaining_entries if je.journal_entry_account_credit != 0] + + # This handles cases with one other credit and multiple debit entries + if len(other_credits) == 1 and other_debits: + excl_tax_leg = other_credits[0] + voucher.incl_tax_amount = sum(d.journal_entry_account_debit for d in other_debits) + + voucher.classification_debugging += f"\nšŸš€ tax_leg = '{tax_leg.journal_entry_account}': '{tax_leg.journal_entry_account_credit}'" + voucher.classification_debugging += f"\nšŸš€ incl_tax_amount = '{voucher.incl_tax_amount}'" + voucher.classification_debugging += f"\nšŸš€ excl_tax_leg = '{excl_tax_leg.journal_entry_account}': '{excl_tax_leg.journal_entry_account_credit}'" + + voucher.classification = frappe.get_cached_value( + "Account", excl_tax_leg.journal_entry_account, "custom_vat_return_credit_classification" + ) + voucher.classification_debugging += f"\nšŸš€ 'Classify Credit entries...' setting for Account '{excl_tax_leg.journal_entry_account}' = '{voucher.classification}'" + continue + + # Fallback to old logic for simple 3-leg entries. incl_tax_leg = None excl_tax_leg = None try: @@ -407,7 +455,7 @@ def process_gl_entries(self, gl_entries): [je for je in filtered_journal_entries if je != tax_leg], key=lambda je: abs(je.journal_entry_account_credit or je.journal_entry_account_debit), ) - except ValueError as e: + except (ValueError, TypeError) as e: voucher.classification_debugging += f"\nšŸš€ {e}]'" if all([tax_leg, incl_tax_leg, excl_tax_leg]): diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 7585238..0000000 --- a/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -book diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 0000000..18bcd5c --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,53 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "South Africa Customisations", + description: "Country Specific Functionality for South Africa", + outDir: '../csf_za/www', + assetsDir: 'assets/csf_za', + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Desk', link: '/' }, + { text: 'Documentation Home', link: '/csf_za_introduction' }, + { text: 'Starktail', link: 'https://starktail.com' } + ], + + sidebar: [ + { text: 'Introduction', link: '/csf_za_introduction' }, + { text: 'Value-added Tax Return', link: '/csf_za_value_added_tax_return.md' }, + { text: 'Support for Bank Statements from South African Banks', link: '/csf_za_bank_statement_import.md' }, + { text: 'Easy-add of VAT in Bank Reconciliation Tool', link: '/csf_za_bank_recon_tool.md' } + ], + + socialLinks: [ + { icon: 'mailgun', link: 'mailto:support@starktail.com'}, + { icon: 'github', link: 'https://github.com/dvdl16/csf_za' } + ], + + editLink: { + pattern: 'https://github.com/dvdl16/csf_za/edit/version-15/docs/:path' + } + }, + // Set metaChunk to avoid having window.__VP_HASH_MAP__ in the generated HTML, + // as this blocks jinja template rendering for frappe portal pages + metaChunk: true, + ignoreDeadLinks: [ + // ignore all links starting with /app/ (these point to doctypes or other resources + // hosted on the frappe site, and won't be alive at build time) + /^\/app\// + ], + // Links that point to pages outside our vitepress docs, like Doctype links should not + // be appended with .html + transformHtml: (code) => { + return code.replace(/href="(\/app\/[^"]*)\.html"/g, 'href="$1"'); + }, + // Inline ALL images to avoid having images in the public directory + vite: { + build: { + assetsInlineLimit: 52428800, // 50 MB, + chunkSizeWarningLimit: 2000 // 2000 KB + }, + }, +}) \ No newline at end of file diff --git a/docs/book.toml b/docs/book.toml deleted file mode 100644 index 233343c..0000000 --- a/docs/book.toml +++ /dev/null @@ -1,6 +0,0 @@ -[book] -authors = ["Dirk van der Laarse"] -language = "en" -multilingual = false -src = "src" -title = "South Africa Customisations Documentation" diff --git a/docs/csf_za_bank_recon_tool.md b/docs/csf_za_bank_recon_tool.md new file mode 100644 index 0000000..5a11773 --- /dev/null +++ b/docs/csf_za_bank_recon_tool.md @@ -0,0 +1,36 @@ +# Easy VAT Addition in Bank Reconciliation Tool + +This feature enhances the Bank Reconciliation Tool to simplify the process of accounting for Value-Added Tax (VAT) when creating Journal Entries for bank transactions. It allows for automatic calculation and posting of VAT, saving time and reducing manual errors. + +## Setup + +To use this feature, you first need to configure the relevant expense accounts. For each **Account** that will be used for taxable transactions during bank reconciliation, you need to set default VAT details. + +1. Navigate to the **Chart of Accounts**. +2. Select the expense account you want to configure (e.g., "Telephone Expenses"). +3. In the Account settings, locate the **Bank Reconciliation** section. +4. Fill in the following fields: + +![Bank Recon settings on Account](images/account-bank-recon-settings.png) + +* **Tax Account**: Specify the VAT account to which the tax portion of the transaction should be posted (e.g., "VAT"). +* **Tax Rate**: Enter the applicable VAT percentage (e.g., 15 for 15%). +* **Cost Center for Tax Account** (Optional): If the VAT portion of the Journal Entry needs to be allocated to a specific Cost Center, select it here. + +## Bank Reconciliation Process + +Once the accounts are set up, the process in the Bank Reconciliation Tool is streamlined. + +1. Open the **Bank Reconciliation Tool** and load your bank transactions. +2. For a given bank transaction, click on **Create Voucher**. + + ![Bank Reconciliation 1](images/bank-reconciliation-1.png) + +3. In the dialog, set the **Document Type** to **Journal Entry**. A **Tax Details** section will appear. +4. Select the appropriate expense **Account** in the **Second Account** field. + + ![Bank Reconciliation 2](images/bank-reconciliation-2.png) + +5. Upon selecting the account, the system will automatically fetch the **Tax Account**, **Tax Rate**, and **Cost Center for Tax Account** from the values you configured on the expense account master. + +When you create the Journal Entry, the system will automatically split the transaction amount. The main expense portion will be posted to the selected expense account, and the calculated VAT amount will be posted to the specified Tax Account, creating a three-line journal entry (Bank, Expense, and VAT). This ensures that VAT is correctly accounted for directly from the bank reconciliation screen. diff --git a/docs/src/bank-statement-import.md b/docs/csf_za_bank_statement_import.md similarity index 84% rename from docs/src/bank-statement-import.md rename to docs/csf_za_bank_statement_import.md index 86276c0..7569ac9 100644 --- a/docs/src/bank-statement-import.md +++ b/docs/csf_za_bank_statement_import.md @@ -1,23 +1,41 @@ -# Bank Statement Import for local banks +# Bank Statement Import for South African Banks -🚧 This documentation is still under construction 🚧 -- [x] Create page for feautre -- [ ] Add all steps with screenshots +This feature simplifies the process of importing bank statements by allowing you to directly upload CSV files from major South African banks without needing to manually reformat them. The system automatically parses the bank-specific file format and converts it into a standardized structure that ERPNext can use for reconciliation. +Currently, the following banks are supported: +- First National Bank +- Bank Zero +- Capitec +- Nedbank +- Standard Bank +- ABSA ## Setup -On the relevant **Bank** records, choose the correct South African Bank: +To enable the automatic parsing, you must configure the relevant **Bank** record in your system. + +1. Navigate to the **Bank** list (you can search for "Bank" in the Awesome Bar). +2. Select the bank you want to configure (e.g., "First National Bank"). +3. In the **Bank Statement Template** field, choose the corresponding bank name from the dropdown list. ![Bank Template on Bank doctype](images/bank-template.png) -## Bank Statement Import +## Bank Statement Import Process + +Once the setup is complete, importing a bank statement is straightforward. -When attaching a `.csv` file on a **Bank Statement Import**, the parsing would be performed according to the *Bank Statement Template* of the linked **Bank** +1. Navigate to the **Bank Statement Import** doctype and create a new record. +2. Select the **Bank Account** for which you are importing the statement. The system will use the **Bank** linked to this account to determine which template to use. +3. Upload the original CSV file you downloaded from your bank in the **Attach File** field. +4. Upon saving the document, the system performs the following actions in the background: + * It reads the uploaded CSV file. + * Based on the template selected on the **Bank** record, it parses the bank-specific columns and data. + * It creates a new, standardized CSV file with the columns required by ERPNext (e.g., splitting a single "Amount" column into "Deposit" and "Withdrawal"). + * This new file is then attached to the document and used for the bank reconciliation process, making the import seamless for the user. -## Template Definitions +## Supported Formats -These are the established `.csv` formats +The following tables show the specific CSV formats that the system is configured to parse for each bank. ### First National Bank diff --git a/docs/csf_za_introduction.md b/docs/csf_za_introduction.md new file mode 100644 index 0000000..76690ad --- /dev/null +++ b/docs/csf_za_introduction.md @@ -0,0 +1,26 @@ +# Introduction +## What is South Africa Customisations? + +This is an [Frappe](https://frappeframework.com/) custom app, intended to add South-Africa-specific features to [ERPNext](https://erpnext.com/) + + +## Key Features +1. [Value-added Tax Return](/csf_za_value_added_tax_return.md): This makes submitting your VAT201 returns to SARS much easier +2. [Support for Bank Statements from South African Banks](/csf_za_bank_statement_import.md): Native import of `.csv` formats from FNB, ABSA and Bank Zero +3. [Easy-add of VAT in Bank Reconciliation Tool](/csf_za_bank_recon_tool.md): No need to *Edit in Full Page* for those Journal Entries that require a VAT leg + + +## Under the Hood + +- [Frappe Framework](https://frappe.io/framework): A full-stack web application framework written in Python and Javascript. The framework provides a robust foundation for building web applications, including a database abstraction layer, user authentication, and a REST API. + + +## Installation + +Go [here](https://github.com/dvdl16/second-ride-custom) for installation. + +## Support + +- [Starktail Website](https://starktail.com) +- [Starktail Email Support](mailto:support@starktail.com) + diff --git a/docs/csf_za_value_added_tax_return.md b/docs/csf_za_value_added_tax_return.md new file mode 100644 index 0000000..0280716 --- /dev/null +++ b/docs/csf_za_value_added_tax_return.md @@ -0,0 +1,76 @@ +# Value-added Tax Return + +## Background + +[Value-Added Tax (VAT)](https://www.sars.gov.za/types-of-tax/value-added-tax/) is an indirect tax on the consumption of goods and services. VAT-registered businesses (vendors) must periodically submit a VAT 201 declaration to the South African Revenue Service (SARS). + +The **Value-added Tax Return** feature in this application is designed to streamline this process. It automatically fetches all VAT-related transactions within a specified period, classifies them according to the official VAT 201 categories, and presents them in a format that mirrors the SARS return, making it easy to review, verify, and file. + +## 1. Setup + +Before you can create a VAT Return, you need to configure the system to correctly identify and classify your VAT transactions. This is a one-time setup. + +### 1.1. Value-added Tax Return Settings + +First, create a **Value-added Tax Return Settings** document for each Company in your system. + +1. In the Awesome Bar, search for "Value-added Tax Return Settings" and go to the list view. +2. Click **Add Value-added Tax Return Settings**. +3. Select the **Company** these settings will apply to. + +![Create new settings](images/create_new_settings.png) + +4. **Tax Accounts**: In this table, add all the G/L accounts that you use for VAT processing. These are typically your VAT control accounts. The system will fetch all transactions from these accounts when generating a return. You can click the "auto_set_tax_accounts" button to automatically populate this table with all accounts of type "Tax". +5. **Map Classifications**: This is the most critical step for automating your VAT return. Here, you will map your existing **Taxes and Charges Templates** to the official SARS VAT classifications. + * For each **Output Tax** category (e.g., "Standard rate (excl capital goods)"), select the corresponding **Sales Taxes and Charges Template** you use for such sales. + * For each **Input Tax** category, select the corresponding **Purchase Taxes and Charges Template**. + + This mapping allows the system to automatically classify any transaction originating from a Sales Invoice or Purchase Invoice. + +![VAT categories mapping](images/vat-categories.gif) + +### 1.2. Account Settings for Manual Journal Entries + +Transactions from Sales and Purchase Invoices are classified using the settings above. However, for manual Journal Entries (e.g., bank charges, fuel expenses, write-offs), the system uses settings on the individual G/L accounts to determine the classification. + +For each relevant expense or income account, you need to set the default VAT classification: + +1. Navigate to the **Chart of Accounts** and select an account (e.g., "Bank Charges"). +2. In the account's settings, find the **VAT Return Classification** section. +3. Set the appropriate classification for debit and credit entries. For an expense account like "Bank Charges," you would typically set the **Classify Debit entries as**: `Input - C Other goods supplied to you (excl capital goods)`. +4. Save the account. Repeat this for all accounts that you use in manual VAT-related journal entries. + +## 2. Creating a VAT Return + +Once the setup is complete, you can generate your VAT return. + +1. In the Awesome Bar, search for **Value-added Tax Return** and create a new document. +2. Set the **Company**, **Tax Period** (in CCYYMM format, e.g., 202508), and the **Date From** and **Date To** for the return period. +3. Save the document. + +### 2.1. Fetching Transactions + +Click the **Get transactions for period** button. The system will: +* Fetch all GL entries from your specified **Tax Accounts** within the date range. +* Fetch related Sales Invoices and Purchase Invoices to find zero-rated transactions. +* Attempt to classify each transaction based on the setup you completed. +* Populate the **Transactions** table at the bottom of the form with the results. + +### 2.2. Classifying and Reviewing Transactions + +After fetching, the system will indicate if there are any unclassified transactions. + +* **Automatically Classified**: Transactions from Invoices or well-defined Journal Entries will be classified automatically. +* **Unclassified**: Some complex or unusual Journal Entries may remain unclassified. You must manually review these. + +Go to the **Transactions** tab to review the fetched entries. For any unclassified row, select the correct **Classification** from the dropdown menu. + +### 2.3. Reviewing the VAT 201 Form + +As you classify transactions, the **Calculation of Output Tax** and **Calculation of Input Tax** tabs are automatically updated. These tabs are structured to look exactly like the SARS VAT 201 form, with each field corresponding to a box on the official return. + +To verify the amount in any field, click the **magnifying glass icon (šŸ”)** next to it. This will open the **Value-added Tax Return Linked Transactions** report, pre-filtered to show you exactly which transactions make up that total. + +### 2.4. Submitting the Return + +Once you have classified all transactions and are satisfied with the totals on the form, you can **Submit** the document. This will lock the return and prevent further changes. You can now use the information on this form to complete your official VAT 201 filing with SARS. \ No newline at end of file diff --git a/docs/src/images/account-bank-recon-settings.png b/docs/images/account-bank-recon-settings.png similarity index 100% rename from docs/src/images/account-bank-recon-settings.png rename to docs/images/account-bank-recon-settings.png diff --git a/docs/src/images/bank-reconciliation-1.png b/docs/images/bank-reconciliation-1.png similarity index 100% rename from docs/src/images/bank-reconciliation-1.png rename to docs/images/bank-reconciliation-1.png diff --git a/docs/src/images/bank-reconciliation-2.png b/docs/images/bank-reconciliation-2.png similarity index 100% rename from docs/src/images/bank-reconciliation-2.png rename to docs/images/bank-reconciliation-2.png diff --git a/docs/src/images/bank-template.png b/docs/images/bank-template.png similarity index 100% rename from docs/src/images/bank-template.png rename to docs/images/bank-template.png diff --git a/docs/src/images/create_new_settings.png b/docs/images/create_new_settings.png similarity index 100% rename from docs/src/images/create_new_settings.png rename to docs/images/create_new_settings.png diff --git a/docs/src/images/vat-categories.gif b/docs/images/vat-categories.gif similarity index 100% rename from docs/src/images/vat-categories.gif rename to docs/images/vat-categories.gif diff --git a/docs/src/README.md b/docs/src/README.md deleted file mode 100644 index fe5c3f4..0000000 --- a/docs/src/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Introduction - -This is an [Frappe](https://frappeframework.com/) custom app, intended to add South-Africa-specific features to [ERPNext](https://erpnext.com/) - - -# Features - -1. [Value-added Tax Return](value-added-tax-return.md): This makes submitting your VAT201 returns to SARS much easier -2. [Support for Bank Statements from South African Banks](bank-statement-import.md): Native import of `.csv` formats from FNB, ABSA and Bank Zero -3. [Easy-add of VAT in Bank Reconciliation Tool](bank-recon-tool.md): No need to *Edit in Full Page* for those Journal Entries that require a VAT leg - - -# Feedback - -Please raise issues for any bugs or enhancements here: [https://github.com/dvdl16/csf_za](https://github.com/dvdl16/csf_za) diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md deleted file mode 100644 index 472ad7d..0000000 --- a/docs/src/SUMMARY.md +++ /dev/null @@ -1,7 +0,0 @@ -# Summary - -[Features](README.md) - -- [Value-added Tax Return](value-added-tax-return.md) -- [Support for Bank Statements from South African Banks](bank-statement-import.md) -- [Easy-add of VAT in Bank Reconciliation Tool](bank-recon-tool.md) diff --git a/docs/src/bank-recon-tool.md b/docs/src/bank-recon-tool.md deleted file mode 100644 index 22d682c..0000000 --- a/docs/src/bank-recon-tool.md +++ /dev/null @@ -1,23 +0,0 @@ -# Easy-add of VAT in Bank Reconciliation Tool - -🚧 This documentation is still under construction 🚧 -- [x] Create page for feautre -- [ ] Add all steps with screenshots - -## Setup - -On every **Account** that will have taxable Journal Entries during Bank Reconciliation, complete these fields: - -![Bank Recon settings on Account](images/account-bank-recon-settings.png) - -*Tax Account*: The relevant **Account** to where the VAT portion should be posted -*Tax Rate*: The relevant **Account** to where the VAT portion should be posted -*Cost Center for Tax Account* (Optional): If the VAT-leg of the **Journal Entry** should have a **Cost Center** set, set it here. - -## Bank Reconcilation - -During Bank Reconciliation, when your *Action* is set to *Create Voucher* and you select an Account, the *Tax Account* and *Tax Rate* will be populated, and will be used to add a VAT-leg in the created **Journal Entry**. - -![Bank Reconciliation 1](images/bank-reconciliation-1.png) - -![Bank Reconciliation 2](images/bank-reconciliation-2.png) diff --git a/docs/src/value-added-tax-return.md b/docs/src/value-added-tax-return.md deleted file mode 100644 index 7fade5f..0000000 --- a/docs/src/value-added-tax-return.md +++ /dev/null @@ -1,26 +0,0 @@ -# Value-added Tax Return - -🚧 This documentation is still under construction 🚧 -- [x] Create page for feautre -- [ ] Add all steps with screenshots - -## Background - -[Value-Added Tax](https://www.sars.gov.za/types-of-tax/value-added-tax/) is an indirect tax on the consumption of goods and services in the economy. Revenue is raised for government by requiring certain traders (vendors), that carry on an enterprise to register for VAT. - -VAT-registered vendors must perform declarations to SARS on a frequent basis, using the VAT 201 form. The *Value-added Tax Return* makes this process easier - -## Setup - -Before creating VAT Returns, you first have to set up a **Value-added Tax Return Settings** document for each Company. - -On **Value-added Tax Return Settings** List, click on **Add Value-added Tax Return Settings** - -![create new settings](images/create_new_settings.png) - - -You'll be greeted with a summary page of how SARS classifies Value-Added Tax. Expand the different sections to see more details. - -![vat categories](images/vat-categories.gif) - -TBC.... \ No newline at end of file diff --git a/package.json b/package.json index e855884..d4e6564 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,25 @@ { - "dependencies": { - "@4tw/cypress-drag-drop": "^2.2.5", - "@cypress/code-coverage": "^3", - "@testing-library/cypress": "^10", - "@testing-library/dom": "8.17.1", - "cypress": "^13.1.0", - "cypress-real-events": "^1.7.6" - } + "dependencies": { + "@4tw/cypress-drag-drop": "^2.2.5", + "@cypress/code-coverage": "^3", + "@testing-library/cypress": "^10", + "@testing-library/dom": "8.17.1", + "cypress": "^13.1.0", + "cypress-real-events": "^1.7.6" + }, + "name": "csf_za", + "version": "0.2.5", + "main": "index.js", + "author": "Dirk van der Laarse ", + "license": "MIT", + "devDependencies": { + "vitepress": "^2.0.0-alpha.12", + "vue": "^3.5.22" + }, + "scripts": { + "docs:dev": "vitepress dev docs --host", + "build": "vitepress build docs && ./prepare_help_files.sh", + "docs:build-gh": "vitepress build docs --outDir docs/.vitepress/dist", + "docs:preview": "vitepress preview docs" } +} \ No newline at end of file diff --git a/prepare_help_files.sh b/prepare_help_files.sh new file mode 100755 index 0000000..cee19b1 --- /dev/null +++ b/prepare_help_files.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# This is used in pacakge.json to block the help pages from public access, and copy the assets to the correct directory + +AUTH_CONTENT="import frappe +from frappe import _ + +if frappe.session.user=='Guest': + frappe.throw(_(\"You need to be logged in to access this page\"), frappe.PermissionError)" + +for file in csf_za/www/csf_za_*.html; do + if [ -f "$file" ]; then + py_file="csf_za/www/$(basename "$file" .html).py" + echo "$AUTH_CONTENT" > "$py_file" + fi +done + +rm -rf ./csf_za/public/chunks +mv ./csf_za/www/assets/csf_za/chunks ./csf_za/public/. +mv ./csf_za/www/assets/csf_za/*.js ./csf_za/public/. +mv ./csf_za/www/assets/csf_za/*.css ./csf_za/public/. \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 9714f1a..e980393 100644 --- a/yarn.lock +++ b/yarn.lock @@ -127,11 +127,21 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" @@ -161,6 +171,13 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== +"@babel/parser@^7.28.4": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== + dependencies: + "@babel/types" "^7.28.5" + "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" @@ -202,6 +219,14 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@babel/types@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -263,6 +288,158 @@ debug "^3.1.0" lodash.once "^4.1.1" +"@docsearch/css@^4.0.0-beta.7": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.2.0.tgz#473bb4c51f4b2b037a71f423e569907ab19e6d72" + integrity sha512-65KU9Fw5fGsPPPlgIghonMcndyx1bszzrDQYLfierN+Ha29yotMHzVS94bPkZS6On9LS8dE4qmW4P/fGjtCf/g== + +"@docsearch/js@^4.0.0-beta.7": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-4.2.0.tgz#66f08161102effaf60c0197be9bb74b81fbfb176" + integrity sha512-KBHVPO29QiGUFJYeAqxW0oXtGf/aghNmRrIRPT4/28JAefqoCkNn/ZM/jeQ7fHjl0KNM6C+KlLVYjwyz6lNZnA== + +"@esbuild/aix-ppc64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz#2ae33300598132cc4cf580dbbb28d30fed3c5c49" + integrity sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg== + +"@esbuild/android-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz#927708b3db5d739d6cb7709136924cc81bec9b03" + integrity sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ== + +"@esbuild/android-arm@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.11.tgz#571f94e7f4068957ec4c2cfb907deae3d01b55ae" + integrity sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg== + +"@esbuild/android-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.11.tgz#8a3bf5cae6c560c7ececa3150b2bde76e0fb81e6" + integrity sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g== + +"@esbuild/darwin-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz#0a678c4ac4bf8717e67481e1a797e6c152f93c84" + integrity sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w== + +"@esbuild/darwin-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz#70f5e925a30c8309f1294d407a5e5e002e0315fe" + integrity sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ== + +"@esbuild/freebsd-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz#4ec1db687c5b2b78b44148025da9632397553e8a" + integrity sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA== + +"@esbuild/freebsd-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz#4c81abd1b142f1e9acfef8c5153d438ca53f44bb" + integrity sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw== + +"@esbuild/linux-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz#69517a111acfc2b93aa0fb5eaeb834c0202ccda5" + integrity sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA== + +"@esbuild/linux-arm@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz#58dac26eae2dba0fac5405052b9002dac088d38f" + integrity sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw== + +"@esbuild/linux-ia32@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz#b89d4efe9bdad46ba944f0f3b8ddd40834268c2b" + integrity sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw== + +"@esbuild/linux-loong64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz#11f603cb60ad14392c3f5c94d64b3cc8b630fbeb" + integrity sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw== + +"@esbuild/linux-mips64el@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz#b7d447ff0676b8ab247d69dac40a5cf08e5eeaf5" + integrity sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ== + +"@esbuild/linux-ppc64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz#b3a28ed7cc252a61b07ff7c8fd8a984ffd3a2f74" + integrity sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw== + +"@esbuild/linux-riscv64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz#ce75b08f7d871a75edcf4d2125f50b21dc9dc273" + integrity sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww== + +"@esbuild/linux-s390x@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz#cd08f6c73b6b6ff9ccdaabbd3ff6ad3dca99c263" + integrity sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw== + +"@esbuild/linux-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz#3c3718af31a95d8946ebd3c32bb1e699bdf74910" + integrity sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ== + +"@esbuild/netbsd-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz#b4c767082401e3a4e8595fe53c47cd7f097c8077" + integrity sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg== + +"@esbuild/netbsd-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz#f2a930458ed2941d1f11ebc34b9c7d61f7a4d034" + integrity sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A== + +"@esbuild/openbsd-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz#b4ae93c75aec48bc1e8a0154957a05f0641f2dad" + integrity sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg== + +"@esbuild/openbsd-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz#b42863959c8dcf9b01581522e40012d2c70045e2" + integrity sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw== + +"@esbuild/openharmony-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz#b2e717141c8fdf6bddd4010f0912e6b39e1640f1" + integrity sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ== + +"@esbuild/sunos-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz#9fbea1febe8778927804828883ec0f6dd80eb244" + integrity sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA== + +"@esbuild/win32-arm64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz#501539cedb24468336073383989a7323005a8935" + integrity sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q== + +"@esbuild/win32-ia32@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz#8ac7229aa82cef8f16ffb58f1176a973a7a15343" + integrity sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA== + +"@esbuild/win32-x64@0.25.11": + version "0.25.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz#5ecda6f3fe138b7e456f4e429edde33c823f392f" + integrity sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA== + +"@iconify-json/simple-icons@^1.2.47": + version "1.2.55" + resolved "https://registry.yarnpkg.com/@iconify-json/simple-icons/-/simple-icons-1.2.55.tgz#eb55f409e76f62f4502504a3e182d04fd8f0c507" + integrity sha512-9vc04pmup/zcef8hDypWU8nMwMaFVkWuUzWkxyL++DVp5AA8baoJHK6RyKN1v+cvfR2agxkUb053XVggzFFkTA== + dependencies: + "@iconify/types" "*" + +"@iconify/types@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -303,6 +480,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -332,6 +514,183 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@rolldown/pluginutils@1.0.0-beta.29": + version "1.0.0-beta.29" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz#f8fc9a8788757dccba0d3b7fee93183621773d4c" + integrity sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q== + +"@rollup/rollup-android-arm-eabi@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz#0f44a2f8668ed87b040b6fe659358ac9239da4db" + integrity sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ== + +"@rollup/rollup-android-arm64@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz#25b9a01deef6518a948431564c987bcb205274f5" + integrity sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA== + +"@rollup/rollup-darwin-arm64@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz#8a102869c88f3780c7d5e6776afd3f19084ecd7f" + integrity sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA== + +"@rollup/rollup-darwin-x64@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz#8e526417cd6f54daf1d0c04cf361160216581956" + integrity sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA== + +"@rollup/rollup-freebsd-arm64@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz#0e7027054493f3409b1f219a3eac5efd128ef899" + integrity sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA== + +"@rollup/rollup-freebsd-x64@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz#72b204a920139e9ec3d331bd9cfd9a0c248ccb10" + integrity sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz#ab1b522ebe5b7e06c99504cc38f6cd8b808ba41c" + integrity sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ== + +"@rollup/rollup-linux-arm-musleabihf@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz#f8cc30b638f1ee7e3d18eac24af47ea29d9beb00" + integrity sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ== + +"@rollup/rollup-linux-arm64-gnu@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz#7af37a9e85f25db59dc8214172907b7e146c12cc" + integrity sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg== + +"@rollup/rollup-linux-arm64-musl@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz#a623eb0d3617c03b7a73716eb85c6e37b776f7e0" + integrity sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q== + +"@rollup/rollup-linux-loong64-gnu@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz#76ea038b549c5c6c5f0d062942627c4066642ee2" + integrity sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA== + +"@rollup/rollup-linux-ppc64-gnu@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz#d9a4c3f0a3492bc78f6fdfe8131ac61c7359ccd5" + integrity sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw== + +"@rollup/rollup-linux-riscv64-gnu@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz#87ab033eebd1a9a1dd7b60509f6333ec1f82d994" + integrity sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw== + +"@rollup/rollup-linux-riscv64-musl@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz#bda3eb67e1c993c1ba12bc9c2f694e7703958d9f" + integrity sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg== + +"@rollup/rollup-linux-s390x-gnu@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz#f7bc10fbe096ab44694233dc42a2291ed5453d4b" + integrity sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ== + +"@rollup/rollup-linux-x64-gnu@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz#a151cb1234cc9b2cf5e8cfc02aa91436b8f9e278" + integrity sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q== + +"@rollup/rollup-linux-x64-musl@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz#7859e196501cc3b3062d45d2776cfb4d2f3a9350" + integrity sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg== + +"@rollup/rollup-openharmony-arm64@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz#85d0df7233734df31e547c1e647d2a5300b3bf30" + integrity sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw== + +"@rollup/rollup-win32-arm64-msvc@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz#e62357d00458db17277b88adbf690bb855cac937" + integrity sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w== + +"@rollup/rollup-win32-ia32-msvc@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz#fc7cd40f44834a703c1f1c3fe8bcc27ce476cd50" + integrity sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg== + +"@rollup/rollup-win32-x64-gnu@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz#1a22acfc93c64a64a48c42672e857ee51774d0d3" + integrity sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ== + +"@rollup/rollup-win32-x64-msvc@4.52.5": + version "4.52.5" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz#1657f56326bbe0ac80eedc9f9c18fc1ddd24e107" + integrity sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg== + +"@shikijs/core@3.14.0", "@shikijs/core@^3.9.2": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-3.14.0.tgz#a1c547794518842fb60bb71932a7bc47de0b4703" + integrity sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw== + dependencies: + "@shikijs/types" "3.14.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + hast-util-to-html "^9.0.5" + +"@shikijs/engine-javascript@3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-3.14.0.tgz#546c14fcf2654ca3c27f76686e969bf3b1496b53" + integrity sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ== + dependencies: + "@shikijs/types" "3.14.0" + "@shikijs/vscode-textmate" "^10.0.2" + oniguruma-to-es "^4.3.3" + +"@shikijs/engine-oniguruma@3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.14.0.tgz#562bcce2f69cc65c92bcf2ccb637b2a7021f3d7b" + integrity sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug== + dependencies: + "@shikijs/types" "3.14.0" + "@shikijs/vscode-textmate" "^10.0.2" + +"@shikijs/langs@3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.14.0.tgz#71e6ca44e661b405209eb63d4449b57b9de529d0" + integrity sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg== + dependencies: + "@shikijs/types" "3.14.0" + +"@shikijs/themes@3.14.0": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.14.0.tgz#2b516c19caf63f78f81f5df9c087800c3b2c7404" + integrity sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA== + dependencies: + "@shikijs/types" "3.14.0" + +"@shikijs/transformers@^3.9.2": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-3.14.0.tgz#441b87394463faa89a86b1cfa5de2f12e9f6dbd3" + integrity sha512-i67zQnY9wLMMnKasonVW1L9fKneSLZDj1ePsA4o0AZWU4uUobmJY9baRDa36z+a9/g0aG76/2tybQvm4hrwxIQ== + dependencies: + "@shikijs/core" "3.14.0" + "@shikijs/types" "3.14.0" + +"@shikijs/types@3.14.0", "@shikijs/types@^3.9.2": + version "3.14.0" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.14.0.tgz#4e666f8d31e319494daf23efcc19a32a5fdaa341" + integrity sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ== + dependencies: + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^10.0.2": + 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== + "@testing-library/cypress@^10": version "10.0.1" resolved "https://registry.yarnpkg.com/@testing-library/cypress/-/cypress-10.0.1.tgz#15abae0edb83237316ec6d07e152b71a50b38387" @@ -378,6 +737,43 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== +"@types/estree@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/hast@^3.0.0", "@types/hast@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + +"@types/linkify-it@^5": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== + +"@types/markdown-it@^14.1.2": + version "14.1.2" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== + dependencies: + "@types/linkify-it" "^5" + "@types/mdurl" "^2" + +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/mdurl@^2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== + "@types/node@*": version "20.12.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" @@ -395,6 +791,16 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + +"@types/web-bluetooth@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz#525433c784aed9b457aaa0ee3d92aeb71f346b63" + integrity sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA== + "@types/yauzl@^2.9.1": version "2.10.3" resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" @@ -402,6 +808,152 @@ dependencies: "@types/node" "*" +"@ungap/structured-clone@^1.0.0": + 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-vue@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz#4c7f559621af104a22255c6ace5626e6d8349689" + integrity sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw== + dependencies: + "@rolldown/pluginutils" "1.0.0-beta.29" + +"@vue/compiler-core@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz#bb8294a0dd31df540563cc6ffa0456f1f7687b97" + integrity sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ== + dependencies: + "@babel/parser" "^7.28.4" + "@vue/shared" "3.5.22" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.1" + +"@vue/compiler-dom@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz#6c9c2c9843520f6d3dbc685e5d0e1e12a2c04c56" + integrity sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA== + dependencies: + "@vue/compiler-core" "3.5.22" + "@vue/shared" "3.5.22" + +"@vue/compiler-sfc@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz#663a8483b1dda8de83b6fa1aab38a52bf73dd965" + integrity sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ== + dependencies: + "@babel/parser" "^7.28.4" + "@vue/compiler-core" "3.5.22" + "@vue/compiler-dom" "3.5.22" + "@vue/compiler-ssr" "3.5.22" + "@vue/shared" "3.5.22" + estree-walker "^2.0.2" + magic-string "^0.30.19" + postcss "^8.5.6" + source-map-js "^1.2.1" + +"@vue/compiler-ssr@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz#a0ef16e364731b25e79a13470569066af101320f" + integrity sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww== + dependencies: + "@vue/compiler-dom" "3.5.22" + "@vue/shared" "3.5.22" + +"@vue/devtools-api@^8.0.0": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-8.0.3.tgz#18e5e8fe57dcb4b83ebfed714bb40da7d7ba55cb" + integrity sha512-YxZE7xNvvfq5XmjJh1ml+CzVNrRjuZYCuT5Xjj0u9RlXU7za/MRuZDUXcKfp0j7IvYkDut49vlKqbiQ1xhXP2w== + dependencies: + "@vue/devtools-kit" "^8.0.3" + +"@vue/devtools-kit@^8.0.3": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-8.0.3.tgz#c07b36ff27734c366e33eb0f4ca82304ce2d566a" + integrity sha512-UF4YUOVGdfzXLCv5pMg2DxocB8dvXz278fpgEE+nJ/DRALQGAva7sj9ton0VWZ9hmXw+SV8yKMrxP2MpMhq9Wg== + dependencies: + "@vue/devtools-shared" "^8.0.3" + birpc "^2.6.1" + hookable "^5.5.3" + mitt "^3.0.1" + perfect-debounce "^2.0.0" + speakingurl "^14.0.1" + superjson "^2.2.2" + +"@vue/devtools-shared@^8.0.3": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-8.0.3.tgz#0ce5d353de5d7f29d22b0683e82d0b09535adbfe" + integrity sha512-s/QNll7TlpbADFZrPVsaUNPCOF8NvQgtgmmB7Tip6pLf/HcOvBTly0lfLQ0Eylu9FQ4OqBhFpLyBgwykiSf8zw== + dependencies: + rfdc "^1.4.1" + +"@vue/reactivity@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.22.tgz#9b26f8557c96df46c9a859914a2229f3ca5b8f4f" + integrity sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A== + dependencies: + "@vue/shared" "3.5.22" + +"@vue/runtime-core@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.22.tgz#e004c1e35f423555a0e4c10646ef3e9d380643d1" + integrity sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ== + dependencies: + "@vue/reactivity" "3.5.22" + "@vue/shared" "3.5.22" + +"@vue/runtime-dom@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz#01276cea7cb9ac2b9aba046adfb5903b494e2e7e" + integrity sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww== + dependencies: + "@vue/reactivity" "3.5.22" + "@vue/runtime-core" "3.5.22" + "@vue/shared" "3.5.22" + csstype "^3.1.3" + +"@vue/server-renderer@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.22.tgz#d134e3409094044bd066d9803714677457756157" + integrity sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ== + dependencies: + "@vue/compiler-ssr" "3.5.22" + "@vue/shared" "3.5.22" + +"@vue/shared@3.5.22", "@vue/shared@^3.5.18": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.22.tgz#9d56a1644a3becb8af1e34655928b0e288d827f8" + integrity sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w== + +"@vueuse/core@13.9.0", "@vueuse/core@^13.6.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-13.9.0.tgz#051aeff47a259e9e4d7d0cc3e54879817b0cbcad" + integrity sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA== + dependencies: + "@types/web-bluetooth" "^0.0.21" + "@vueuse/metadata" "13.9.0" + "@vueuse/shared" "13.9.0" + +"@vueuse/integrations@^13.6.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-13.9.0.tgz#1bd1d77093a327321cca00e2bbf5da7b18aa6b43" + integrity sha512-SDobKBbPIOe0cVL7QxMzGkuUGHvWTdihi9zOrrWaWUgFKe15cwEcwfWmgrcNzjT6kHnNmWuTajPHoIzUjYNYYQ== + dependencies: + "@vueuse/core" "13.9.0" + "@vueuse/shared" "13.9.0" + +"@vueuse/metadata@13.9.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-13.9.0.tgz#57c738d99661c33347080c0bc4cd11160e0d0881" + integrity sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg== + +"@vueuse/shared@13.9.0": + version "13.9.0" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-13.9.0.tgz#7168b4ed647e625b05eb4e7e80fe8aabd00e3923" + integrity sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -568,6 +1120,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +birpc@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/birpc/-/birpc-2.6.1.tgz#c73463590928897e80f3263d9fbb7da63515014b" + integrity sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ== + blob-util@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" @@ -662,6 +1219,11 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + chalk@4.1.2, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -679,6 +1241,16 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" @@ -763,6 +1335,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + commander@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" @@ -793,6 +1370,13 @@ 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== +copy-anything@^4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-4.0.5.tgz#16cabafd1ea4bb327a540b750f2b4df522825aea" + integrity sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA== + dependencies: + is-what "^5.2.0" + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -807,6 +1391,11 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + cypress-real-events@^1.7.6: version "1.12.0" resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.12.0.tgz#ffeb2b23686ba5b16ac91dd9bc3b6785d36d38d3" @@ -945,11 +1534,18 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -dequal@^2.0.3: +dequal@^2.0.0, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +devlop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -995,6 +1591,11 @@ enquirer@^2.3.6: ansi-colors "^4.1.1" strip-ansi "^6.0.1" +entities@^4.5.0: + version "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.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" @@ -1027,6 +1628,38 @@ es6-error@^4.0.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +esbuild@^0.25.0: + version "0.25.11" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.11.tgz#0f31b82f335652580f75ef6897bba81962d9ae3d" + integrity sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.11" + "@esbuild/android-arm" "0.25.11" + "@esbuild/android-arm64" "0.25.11" + "@esbuild/android-x64" "0.25.11" + "@esbuild/darwin-arm64" "0.25.11" + "@esbuild/darwin-x64" "0.25.11" + "@esbuild/freebsd-arm64" "0.25.11" + "@esbuild/freebsd-x64" "0.25.11" + "@esbuild/linux-arm" "0.25.11" + "@esbuild/linux-arm64" "0.25.11" + "@esbuild/linux-ia32" "0.25.11" + "@esbuild/linux-loong64" "0.25.11" + "@esbuild/linux-mips64el" "0.25.11" + "@esbuild/linux-ppc64" "0.25.11" + "@esbuild/linux-riscv64" "0.25.11" + "@esbuild/linux-s390x" "0.25.11" + "@esbuild/linux-x64" "0.25.11" + "@esbuild/netbsd-arm64" "0.25.11" + "@esbuild/netbsd-x64" "0.25.11" + "@esbuild/openbsd-arm64" "0.25.11" + "@esbuild/openbsd-x64" "0.25.11" + "@esbuild/openharmony-arm64" "0.25.11" + "@esbuild/sunos-x64" "0.25.11" + "@esbuild/win32-arm64" "0.25.11" + "@esbuild/win32-ia32" "0.25.11" + "@esbuild/win32-x64" "0.25.11" + escalade@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" @@ -1042,6 +1675,11 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + eventemitter2@6.4.7: version "6.4.7" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" @@ -1120,6 +1758,11 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -1151,6 +1794,13 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +focus-trap@^7.6.5: + version "7.6.6" + resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.6.6.tgz#a255c1088ddc8cd4363b3023bf28b224fd38aff2" + integrity sha512-v/Z8bvMCajtx4mEXmOo7QEsIzlIOqRXTIwgUfsFOF9gEsespdbD0AkPIka1bSXZ8Y8oZ+2IVDQZePkTfEHZl7Q== + dependencies: + tabbable "^6.3.0" + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -1200,6 +1850,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -1366,11 +2021,45 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hast-util-to-html@^9.0.5: + 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" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + +hookable@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +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" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + http-signature@~1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" @@ -1591,6 +2280,11 @@ is-weakset@^2.0.3: call-bind "^1.0.7" get-intrinsic "^1.2.4" +is-what@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-5.5.0.tgz#a3031815757cfe1f03fed990bf6355a2d3f628c4" + integrity sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -1813,6 +2507,13 @@ lz-string@^1.4.4, lz-string@^1.5.0: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== +magic-string@^0.30.19: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -1827,6 +2528,26 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" +mark.js@8.11.1: + version "8.11.1" + resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" + integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== + +mdast-util-to-hast@^13.0.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" + integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -1837,6 +2558,38 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -1874,6 +2627,16 @@ minimist@^1.2.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minisearch@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-7.2.0.tgz#3dc30e41e9464b3836553b6d969b656614f8f359" + integrity sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg== + +mitt@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1884,6 +2647,11 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + node-preload@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" @@ -1978,6 +2746,20 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +oniguruma-parser@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz#82ba2208d7a2b69ee344b7efe0ae930c627dcc4a" + integrity sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w== + +oniguruma-to-es@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz#50db2c1e28ec365e102c1863dfd3d1d1ad18613e" + integrity sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg== + dependencies: + oniguruma-parser "^0.12.1" + regex "^6.0.1" + regex-recursion "^6.0.2" + ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" @@ -2051,6 +2833,11 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== +perfect-debounce@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-2.0.0.tgz#0ff94f1ecbe0a6bca4b1703a2ed08bbe43739aa7" + integrity sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -2061,11 +2848,21 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +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== + picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -2083,6 +2880,15 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== +postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -2109,6 +2915,11 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +property-information@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + proxy-from-env@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" @@ -2159,6 +2970,25 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== +regex-recursion@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-6.0.2.tgz#a0b1977a74c87f073377b938dbedfab2ea582b33" + integrity sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg== + dependencies: + regex-utilities "^2.3.0" + +regex-utilities@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280" + integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== + +regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/regex/-/regex-6.0.1.tgz#282fa4435d0c700b09c0eb0982b602e05ab6a34f" + integrity sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA== + dependencies: + regex-utilities "^2.3.0" + regexp.prototype.flags@^1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" @@ -2221,6 +3051,11 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== +rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + rimraf@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -2228,6 +3063,37 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" +rollup@^4.43.0: + version "4.52.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.5.tgz#96982cdcaedcdd51b12359981f240f94304ec235" + integrity sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.52.5" + "@rollup/rollup-android-arm64" "4.52.5" + "@rollup/rollup-darwin-arm64" "4.52.5" + "@rollup/rollup-darwin-x64" "4.52.5" + "@rollup/rollup-freebsd-arm64" "4.52.5" + "@rollup/rollup-freebsd-x64" "4.52.5" + "@rollup/rollup-linux-arm-gnueabihf" "4.52.5" + "@rollup/rollup-linux-arm-musleabihf" "4.52.5" + "@rollup/rollup-linux-arm64-gnu" "4.52.5" + "@rollup/rollup-linux-arm64-musl" "4.52.5" + "@rollup/rollup-linux-loong64-gnu" "4.52.5" + "@rollup/rollup-linux-ppc64-gnu" "4.52.5" + "@rollup/rollup-linux-riscv64-gnu" "4.52.5" + "@rollup/rollup-linux-riscv64-musl" "4.52.5" + "@rollup/rollup-linux-s390x-gnu" "4.52.5" + "@rollup/rollup-linux-x64-gnu" "4.52.5" + "@rollup/rollup-linux-x64-musl" "4.52.5" + "@rollup/rollup-openharmony-arm64" "4.52.5" + "@rollup/rollup-win32-arm64-msvc" "4.52.5" + "@rollup/rollup-win32-ia32-msvc" "4.52.5" + "@rollup/rollup-win32-x64-gnu" "4.52.5" + "@rollup/rollup-win32-x64-msvc" "4.52.5" + fsevents "~2.3.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -2303,6 +3169,20 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shiki@^3.9.2: + version "3.14.0" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-3.14.0.tgz#fd38c387a41c918d709252d2d7d85ce63351d88d" + integrity sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g== + dependencies: + "@shikijs/core" "3.14.0" + "@shikijs/engine-javascript" "3.14.0" + "@shikijs/engine-oniguruma" "3.14.0" + "@shikijs/langs" "3.14.0" + "@shikijs/themes" "3.14.0" + "@shikijs/types" "3.14.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + side-channel@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" @@ -2341,11 +3221,21 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +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" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + spawn-wrap@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" @@ -2358,6 +3248,11 @@ spawn-wrap@^2.0.0: signal-exit "^3.0.2" which "^2.0.1" +speakingurl@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" + integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2394,6 +3289,14 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2411,6 +3314,13 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +superjson@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.3.tgz#c42236fff6ecc449b7ffa7f023a9a028a5ec9c87" + integrity sha512-ay3d+LW/S6yppKoTz3Bq4mG0xrS5bFwfWEBmQfbC7lt5wmtk+Obq0TxVuA9eYRirBTQb1K3eEpBRHMQEo0WyVw== + dependencies: + copy-anything "^4" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2432,6 +3342,11 @@ supports-color@^8.1.1: dependencies: has-flag "^4.0.0" +tabbable@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.3.0.tgz#2e0e6163935387cdeacd44e9334616ca0115a8d3" + integrity sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ== + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -2451,6 +3366,14 @@ through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + tmp@~0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" @@ -2478,6 +3401,11 @@ tough-cookie@^4.1.3: universalify "^0.2.0" url-parse "^1.5.3" +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + tslib@^2.1.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" @@ -2517,6 +3445,44 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +unist-util-is@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.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" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -2562,6 +3528,71 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + +vite@^7.1.2: + version "7.1.12" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.12.tgz#8b29a3f61eba23bcb93fc9ec9af4a3a1e83eecdb" + integrity sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug== + dependencies: + esbuild "^0.25.0" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + +vitepress@^2.0.0-alpha.12: + version "2.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-2.0.0-alpha.12.tgz#e75648eec6c43bff1d669f9a7f81f777acc6e4fd" + integrity sha512-yZwCwRRepcpN5QeAhwSnEJxS3I6zJcVixqL1dnm6km4cnriLpQyy2sXQDsE5Ti3pxGPbhU51nTMwI+XC1KNnJg== + dependencies: + "@docsearch/css" "^4.0.0-beta.7" + "@docsearch/js" "^4.0.0-beta.7" + "@iconify-json/simple-icons" "^1.2.47" + "@shikijs/core" "^3.9.2" + "@shikijs/transformers" "^3.9.2" + "@shikijs/types" "^3.9.2" + "@types/markdown-it" "^14.1.2" + "@vitejs/plugin-vue" "^6.0.1" + "@vue/devtools-api" "^8.0.0" + "@vue/shared" "^3.5.18" + "@vueuse/core" "^13.6.0" + "@vueuse/integrations" "^13.6.0" + focus-trap "^7.6.5" + mark.js "8.11.1" + minisearch "^7.1.2" + shiki "^3.9.2" + vite "^7.1.2" + vue "^3.5.18" + +vue@^3.5.18, vue@^3.5.22: + version "3.5.22" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.22.tgz#2b8ddb94ee4b640ef12fe7f6efe1cf16f3b582e7" + integrity sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ== + dependencies: + "@vue/compiler-dom" "3.5.22" + "@vue/compiler-sfc" "3.5.22" + "@vue/runtime-dom" "3.5.22" + "@vue/server-renderer" "3.5.22" + "@vue/shared" "3.5.22" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -2686,3 +3717,8 @@ yauzl@^2.10.0: dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + +zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==