+
+
+ | "`{lang=python} 形式で返す。
+
+## ConfigurationError
+サーバー設定に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class ConfigurationError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## CertificatesError
+証明書の操作に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class CertificatesError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## ServiceSettingsError
+動的サービス設定の操作に関する基底例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class ServiceSettingsError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## CredentialsError
+クライアント認証情報の操作に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class CredentialsError(ServiceSettingsError):
+```
+
+#### 継承元
+`ServiceSettingsError`
+
+
+## OAuthTokenError
+OAuth トークンの操作に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class OAuthTokenError(ServiceSettingsError):
+```
+
+#### 継承元
+`ServiceSettingsError`
+
+
+## UnsafeOperationError
+安全でない操作が拒否されたことを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class UnsafeOperationError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## SystemAdminNotFound
+システム管理者が見つからないことを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class SystemAdminNotFound(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## InfrastructureError
+インフラストラクチャの操作に関する例外クラス。
+
+
+#### シグネチャ
+```python[exc.py]
+class InfrastructureError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## DatabaseError
+データベース操作に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class DatabaseError(InfrastructureError):
+```
+
+#### 継承元
+`InfrastructureError`
+
+
+## DatastoreError
+データストア操作に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class DatastoreError(InfrastructureError):
+```
+
+#### 継承元
+`InfrastructureError`
+
+
+## TaskExcutionError
+タスクの実行に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class TaskExcutionError(DatastoreError):
+```
+
+#### 継承元
+`DatastoreError`
+
+
+## RecordNotFound
+レコードが見つからないことを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class RecordNotFound(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## InvalidRecordError
+レコードが不正であることを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class InvalidRecordError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## ApiClientError
+API クライアントの操作に関する基底例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class ApiClientError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## ResourceInvalid
+API クライアント操作において、リソースが不正であることを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class ResourceInvalid(ApiClientError):
+```
+
+#### 継承元
+`ApiClientError`
+
+
+## ResourceNotFound
+API クライアント操作において、リソースが見つからないことを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class ResourceNotFound(ApiClientError):
+```
+
+#### 継承元
+`ApiClientError`
+
+
+## UnexpectedResponseError
+API クライアント操作において、予期しないレスポンスが返されたことを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class UnexpectedResponseError(ApiClientError):
+```
+
+#### 継承元
+`ApiClientError`
+
+
+## ApiRequestError
+アプリケーションの API リクエストの処理に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class ApiRequestError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## RequestConflict
+API リクエストの処理において、リクエストの内容に競合があることを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class RequestConflict(ApiRequestError):
+```
+
+#### 継承元
+`ApiRequestError`
+
+
+## InvalidQueryError
+API クエリの内容が不正であることを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class InvalidQueryError(ApiRequestError):
+```
+
+#### 継承元
+`ApiRequestError`
+
+
+## InvalidFormError
+リクエストのフォームデータが不正であることを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class InvalidFormError(ApiRequestError):
+```
+
+#### 継承元
+`ApiRequestError`
+
+
+## BulkOperationError
+一括操作の処理に関する例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class BulkOperationError(JAIROCloudGroupsManagerError):
+```
+
+#### 継承元
+`JAIROCloudGroupsManagerError`
+
+
+## FileValidationError
+一括操作で使用されるファイルの内容が不正であることを示す例外クラス。
+
+#### シグネチャ
+```python[exc.py]
+class FileValidationError(BulkOperationError):
+```
+
+#### 継承元
+`BulkOperationError`
diff --git a/docs/content/01.detailed/02.foundation/ext.md b/docs/content/01.detailed/02.foundation/ext.md
new file mode 100644
index 00000000..c7a27412
--- /dev/null
+++ b/docs/content/01.detailed/02.foundation/ext.md
@@ -0,0 +1,147 @@
+---
+title: ext
+description: Flask アプリケーションの拡張機能を提供する。
+---
+
+## JAIROCloudGroupsManager
+当システムの全体的な初期化処理を行い、 Flask 拡張として登録するクラス。
+
+#### シグネチャ
+```python[ext.py]
+class JAIROCloudGroupsManager:
+```
+
+#### 属性
+
+| 名前 | 型 | 説明 |
+| --------- | ----------------------------------------------- | ------------------------------------------------------------------------------------ |
+| datastore | dict[str, Redis] | データストアの接続情報を保持する辞書 |
+| _config | str \| [RuntimeConfig](config.md#runtimeconfig) | (プライベート)サーバー設定のファイルパス、またはサーバー設定インスタンスを保持する |
+
+#### メソッド
+
+| 名前 | 型 | 説明 |
+| -------------------------- | ---- | ------------------------------------------ |
+| __init__() | None | クラスの初期化メソッド |
+| init_app() | None | Flask アプリケーションを初期化するメソッド |
+| init_config() | None | サーバー設定値を初期化するメソッド |
+| init_db_app() | None | データベースを初期化するメソッド |
+| init_storage() | None | ストレージを初期化するメソッド |
+
+#### プロパティ
+
+| 名前 | 型 | 説明 |
+| ------ | ---------------------------------------- | ------------------------ |
+| config | [RuntimeConfig](config.md#runtimeconfig) | サーバー設定インスタンス |
+
+### \_\_init__
+クラスの初期化メソッド。
+
+#### シグネチャ
+```python[ext.py]
+def __init__(self, app: Flask = None, config: str | RuntimeConfig = None) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------ | ----------------------------------------------- | ---------- | ---------------------------------------------- |
+| app | Flask | None | Flask アプリケーションインスタンス |
+| config | str \| [RuntimeConfig](config.md#runtimeconfig) | None | サーバー設定値のインポート名またはオブジェクト |
+
+#### 処理内容
+1. 属性 `config` に引数 `config` の値を設定する。
+ 引数の指定がなければ、 [`DEFAULT_CONFIG_PATH`](./const.md#default_config_path) を設定する。
+2. 引数 `app` が指定されている場合、 [`init_app`](#init_app) メソッドを呼び出す。
+
+
+### init_app
+Flask 拡張として初期化を行うメソッド。
+
+#### シグネチャ
+```python[ext.py]
+def init_app(self, app: Flask) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ----- | ---------------------------------- |
+| app | Flask | Flask アプリケーションインスタンス |
+
+#### 処理内容
+1. [`init_config`](#init_config) メソッドを呼び出し、サーバー設定値を初期化する。
+2. [`logger:setup_logger`](./logger.md#setup_logger) 関数を呼び出し、アプリケーションのロガーの設定を行う。
+3. [`init_db_app`](#init_db_app) メソッドを呼び出し、データベースを初期化する。
+4. [`login_manager`](./auth.md#login_manager) を初期化する。
+5. [`datastore:setup_datastore`](./datastore.md#setup_datastore) メソッドを呼び出し、属性 `datastore` を初期化する。
+6. [`api.router:create_api_blueprint`](../04.api/01.router.md#create_api_blueprint) を呼び出し Blueprint を作成し、アプリケーションに登録する。
+ URL プレフィックスは `/api` とする。
+7. [`storage:init_storage`](#init_storage) メソッドを呼び出し、ストレージを初期化する。
+8. 自身を Flask 拡張として `"jairocloud-groups-manager"` の名前で登録する。
+
+
+### init_config
+サーバー設定値を初期化するメソッド。
+
+#### シグネチャ
+```python[ext.py]
+def init_config(self, app: Flask) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ----- | ---------------------------------- |
+| app | Flask | Flask アプリケーションインスタンス |
+
+#### 処理内容
+1. 属性 `config` の値で [`config:setup_config`](config.md#setup_config) 関数を呼び出し、
+ サーバー設定値を初期化する。
+1. 引数 `app` の設定オブジェクトにサーバー設定値を登録する。
+2. 引数 `app` の設定オブジェクトに環境変数を読み込ませる。
+
+
+### init_db_app
+データベースに関する初期化を行うメソッド。
+
+#### シグネチャ
+```python[ext.py]
+def init_db_app(self, app: Flask) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ----- | ---------------------------------- |
+| app | Flask | Flask アプリケーションインスタンス |
+
+#### 依存するライブラリ
+- **Flask-SQLAlchemy**: データベース拡張機能の初期化に使用。
+
+#### 処理内容
+1. データベース拡張機能を初期化する。
+2. テーブルに対応するモデルクラスをインポートし、読み込ませる。
+
+
+### init_storage
+ストレージに関する初期化を行うメソッド。
+
+#### シグネチャ
+```python[ext.py]
+def init_storage(self, app: Flask) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ----- | ---------------------------------- |
+| app | Flask | Flask アプリケーションインスタンス |
+
+#### 処理内容
+1. サーバー設定値 [`STORAGE.type`](config.md#storage) を参照し、ストレージの種別に応じた初期化を行う。
+ 現時点ではローカルストレージのみをサポートしているため、ローカルストレージの初期化処理を行う。
+ オブジェクトストレージを使用する場合は、ファイルシステムに直接マウントすることで対応する。
+ - 設定値が `"local"` の場合、ローカルストレージの初期化処理を行う。
+ [`STORAGE.local.temporary`](../02.foundation/config.md#localstorageconfig) を参照し、ディレクトリが存在しない場合は作成する。
+ [`STORAGE.local.storage`](../02.foundation/config.md#localstorageconfig) を参照し、ディレクトリが存在しない場合は作成する。
diff --git a/docs/content/01.detailed/02.foundation/factory.md b/docs/content/01.detailed/02.foundation/factory.md
new file mode 100644
index 00000000..4fb1111c
--- /dev/null
+++ b/docs/content/01.detailed/02.foundation/factory.md
@@ -0,0 +1,74 @@
+---
+title: factory
+description: アプリケーションのファクトリ関数を提供する。
+---
+
+## create_app
+アプリケーションファクトリ関数。 Flask アプリケーションを初期化する。
+
+#### シグネチャ
+```python[factory.py]
+@overload
+def create_app(import_name: str) -> Flask: ...
+@overload
+def create_app(import_name: str, *, config_path: str) -> Flask: ...
+@overload
+def create_app(import_name: str, *, config: RuntimeConfig) -> Flask: ...
+
+def create_app(import_name: str, config_path: Any = None, config: Any = None) -> Flask:
+```
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ----------- | ------------------------------------------ | ---------- | ------------------------------------------ |
+| import_name | str | - | Flask アプリケーションのインポート名 |
+| config_path | str | None | (オーバーロード)設定ファイルのパス |
+| config | [RuntimeConfig](./config.md#runtimeconfig) | None | (オーバーロード)サーバー設定インスタンス |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----- | ----------------------------------------------- |
+| Flask | 初期化された Flask アプリケーションインスタンス |
+
+#### 依存するライブラリ
+- **Flask**: サーバーサイドアプリケーションフレームワークとして使用。
+
+#### 処理概要
+1. 引数 `import_name` を使用して Flask アプリケーションのインスタンスを生成する。
+2. Flask 拡張 [`ext:JAIROCloudGroupsManager`](./ext.md#jairocloudgroupsmanager) をアプリケーションインスタンスで初期化する。
+ このとき、引数 `config_path` または `config` を渡す。
+3. [`celery_init_app`](#celery_init_app) を呼び出し、 Celery アプリケーションを初期化する。
+4. 初期化された Flask アプリケーションインスタンスを戻り値として返却する。
+
+
+## celery_init_app
+Celery アプリケーションを生成するファクトリ関数。 Flask 拡張として初期化を行う。
+
+#### シグネチャ
+```python[factory.py]
+def celery_init_app(app: Flask) -> Celery:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ----- | ---------------------------------- |
+| app | Flask | Flask アプリケーションインスタンス |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------ | ----------------------------------- |
+| Celery | Celery アプリケーションインスタンス |
+
+#### 依存するライブラリ
+- **Celery**: 非同期タスクの実行と管理に使用。
+
+#### 処理概要
+1. Celery アプリケーションのインスタンスを生成する。
+ このとき、タスクが Flask アプリケーションのコンテキスト内で実行されるように設定する。
+2. 引数 `app` から設定値 `CELERY` を取得し、 Celery アプリケーションの設定に登録する。
+3. Celery アプリケーションを Flask 拡張として `"celery"` という名前で登録する。
+4. 初期化済みの Celery アプリケーションインスタンスを戻り値として返却する。
diff --git a/docs/content/01.detailed/02.foundation/logger.md b/docs/content/01.detailed/02.foundation/logger.md
new file mode 100644
index 00000000..f351885b
--- /dev/null
+++ b/docs/content/01.detailed/02.foundation/logger.md
@@ -0,0 +1,61 @@
+---
+title: logger
+description: 当システムのアプリケーションログに関する機能を提供する。
+---
+
+## setup_logger
+アプリケーションログのロガーを設定する機能を提供する。
+
+#### シグネチャ
+```python[logger.py]
+def setup_logger(app: Flask, config: RuntimeConfig) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------ | ---------------------------------------- | ---------------------------------- |
+| app | Flask | Flask アプリケーションインスタンス |
+| config | [RuntimeConfig](config.md#runtimeconfig) | サーバー設定インスタンス |
+
+#### 処理内容
+1. ログレベル設定 [`LOG.level`](config.md#logconfig) に基づいて、アプリケーションのロガーのログレベルを設定する。
+2. アプリケーションログから標準出力に出力するハンドラーを取得する。
+ ハンドラーが存在しない場合は新規に作成し、アプリケーションのロガーに追加する。
+3. ハンドラーのログレベルを設定を [`LOG.level`](config.md#logconfig) に基づいて設定する。
+4. ログのフォーマッタを作成し、ハンドラーに設定する。
+ - ログフォーマットはサーバー設定値 [`LOG.format`](config.md#logconfig) および [`LOG.datefmt`](config.md#logconfig) に基づく。
+ - `LOG.format` が未設定の場合は [`DEFAULT_LOG_FORMAT`](./const.md#default_log_format) を使用する。
+ - `LOG.datefmt` が未設定の場合は [`DEFAULT_LOG_DATEFMT`](./const.md#default_log_datefmt) を使用する。
+ - 開発環境モード( `app.config["ENV"]` が `"development"` または `app.debug` が `True` )の場合は、[`DEFAULT_LOG_FORMAT_DEV`](./const.md#default_log_format_dev) を使用する。
+ - タイムスタンプは協定世界時 (UTC) で出力されるように設定する。
+5. ハンドラーにフィルター [`_request_context_filter`](#_request_context_filter) を追加する。
+
+
+## _request_context_filter
+ログレコードにリクエストコンテキスト情報を追加するフィルター。
+
+#### シグネチャ
+```python[logger.py]
+def _request_context_filter(record: LogRecord) -> Literal[True]:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------ | --------- | ------------ |
+| record | LogRecord | ログレコード |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------- | ------------------ |
+| Literal[True] | 常に True を返す。 |
+
+#### 処理内容
+1. ログレコード `record` に属性 `addr` を追加する。
+ - Flask のリクエストコンテキストが存在する場合、クライアントの IP アドレスを設定する。
+ リクエストに X-Forwarded-For ヘッダーが存在する場合はその最初の値を使用し、存在しない場合は `request.remote_addr` を使用する。
+ - リクエストコンテキストが存在しない場合は `"unknown"` として設定する。
+2. ログレコード `record` に属性 `user` を追加する。
+ - Flask-Login の `current_user` から ePPN を取得して設定する。
+ - 認証されていない場合は `"anonymous"` として設定する。
+3. 戻り値として `True` を返す。
diff --git a/docs/content/01.detailed/02.foundation/messages.md b/docs/content/01.detailed/02.foundation/messages.md
new file mode 100644
index 00000000..3a439cda
--- /dev/null
+++ b/docs/content/01.detailed/02.foundation/messages.md
@@ -0,0 +1,151 @@
+---
+title: messages
+description: 当システムのアプリケーションログおよびエラーメッセージのリソースを提供する。
+---
+
+## info, I
+info レベルのメッセージのリソース群を提供する名前空間。 `I` は `info` のエイリアスである。
+
+## warning, W
+warning レベルのメッセージのリソース群を提供する名前空間。 `W` は `warning` のエイリアスである。
+
+## error, E
+error レベルのメッセージのリソース群を提供する名前空間。 `E` は `error` のエイリアスである。
+
+
+## LogMessage
+単一のログメッセージおよびエラーメッセージのリソースを定義するクラス。実行時に文字列としての振る舞う。
+アプリケーションログのメッセージ本文として使用される。
+
+#### シグネチャ
+```python[messages.py]
+class LogMessage(collections.UserString):
+```
+
+#### 継承元
+`collections.UserString`
+
+#### 属性
+
+| 名前 | 型 | 説明 |
+| ---- | --- | ---------------------- |
+| code | str | メッセージコード |
+| data | str | (継承)メッセージ本文 |
+
+#### メソッド
+
+| 名前 | 型 | 説明 |
+| -------------------------- | ---- | -------------------------------------------------------- |
+| __init__() | None | クラスの初期化メソッド |
+| __str__() | str | 文字列としての振る舞いを提供するメソッド |
+| __eq__() | str | リソースの透過性を評価するメソッド |
+| __mod__() | int | メッセージのプレースホルダーに値を埋め込むためのメソッド |
+
+#### 注釈
+- **変数埋め込み**: エラークラスやエラーレスポンスの初期化時に変数を埋め込む際は、 `%` 演算子を使用してプレースホルダーに値を埋め込む。
+ これにより、リソースを保持したまま、変数が埋め込まれた新しいインスタンスが生成される。
+ ```python[sample.py]
+ E.SAMPLE_ERROR = LogMessage(
+ code="E0001",
+ message="Sample error message with variable: %(var_name)s"
+ )
+ error_message = E.SAMPLE_ERROR % {"var_name": value}
+ raise SomeError(error_message)
+ ```
+- **遅延評価**: アプリケーションログに出力する用途でメッセージに変数を含める場合、 % 演算子や f-string を使用せず、本文に `%(var_name)s` 形式のプレースホルダを記述する。第二引数に変数を辞書形式で渡すことで、ログ出力時に変数が評価される。
+ これにより、サーバーに設定されたログレベルが実行条件を満たさない場合に文字列の結合処理がスキップされ、パフォーマンスの最適化が図られる。
+ ```python[sample.py]
+ current_app.logger.error(E.SAMPLE_ERROR, {"var_name": value})
+ ```
+
+### \_\_init__
+クラスの初期化メソッド。メッセージコードとメッセージ本文を設定する。
+
+#### シグネチャ
+```python[messages.py]
+def __init__(self, code: LiteralString, message: LiteralString) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------- | ------------- | -------------------- |
+| code | LiteralString | ログメッセージコード |
+| message | LiteralString | ログメッセージ本文 |
+
+#### 処理内容
+1. 継承元クラスの `__init__` メソッドを呼び出し、引数 `message` を設定する。
+2. 属性 `code` に引数 `code` の値を設定する。
+
+### \_\_str__
+文字列としての振る舞いを提供するメソッド。メッセージコードとメッセージ本文を組み合わせた文字列を返す。
+
+#### シグネチャ
+```python[messages.py]
+def __str__(self) -> str:
+```
+
+#### 戻り値
+
+| 型 | 説明 |
+| --- | ------------------------------------------ |
+| str | メッセージコードと本文を組み合わせた文字列 |
+
+#### 処理内容
+1. メッセージコードとメッセージ本文を `" | "` の形式の文字列に結合し、戻り値として返す。
+
+
+### \_\_mod__
+ログメッセージのプレースホルダーに値を埋め込むためのメソッド。 `%` 演算子をオーバーロードして実装する。
+メッセージリソースはイミュータブルであるべきであるため、プレースホルダーに値を埋め込んだ新しいインスタンスを返す。
+
+#### シグネチャ
+```python[messages.py]
+def __mod__(self, other: dict[str, Any]) -> str:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | -------------- | ---------------------------------------------- |
+| other | dict[str, Any] | プレースホルダーに埋め込む変数を辞書形式で指定 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------- | ---------------------------------------------------- |
+| [LogMessage](#logmessage) | プレースホルダーに値が埋め込まれた新しいインスタンス |
+
+#### 処理内容
+1. 引数 `other` を用いて、属性 `data` の文字列のプレースホルダーに値を埋め込んだ文字列を生成する。
+2. 新しい [`LogMessage`](#logmessage) インスタンスを作成し、属性 `code` に自身の `code` 属性を、
+ 属性 `message` に埋め込み済みの文字列を設定する。
+3. 新しいインスタンスを戻り値として返す。
+
+
+### \_\_eq__
+リソースの透過性を評価するメソッド。リソースコードが同一であれば等しいとみなす。
+ログメッセージ本文のプレースホルダーに値が埋め込まれていても、リソースコードが同一であれば等しいとみなす。
+メッセージのリソースコードをもとに条件分岐を行うことができる。
+
+#### シグネチャ
+```python[messages.py]
+def __eq__(self, other: object) -> bool:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | ------ | ---------------------- |
+| other | object | 比較対象のオブジェクト |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---- | --------------------------------- |
+| bool | リソースコードが同一であれば True |
+
+#### 処理内容
+1. 比較対象 `other` が [`LogMessage`](#logmessage) クラスのインスタンスでない場合は `NotImplemented`{lang=python} を返す。
+2. 引数 `other` の `code` 属性と自身の `code` 属性が同一であれば `True` を返し、そうでなければ `False` を返す。
+
diff --git a/docs/content/01.detailed/02.foundation/signals.md b/docs/content/01.detailed/02.foundation/signals.md
new file mode 100644
index 00000000..72af3719
--- /dev/null
+++ b/docs/content/01.detailed/02.foundation/signals.md
@@ -0,0 +1,135 @@
+---
+title: signals
+description: 当システムのシグナル機能に関する機能を提供する。
+---
+
+## repository_created
+リポジトリが作成されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+repository_created: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される。
+
+
+## repository_updated
+リポジトリが更新されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+repository_updated: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される。
+
+
+## repository_deleted
+リポジトリが削除されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+repository_deleted: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される。
+
+
+## group_created
+グループが作成されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+group_created: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される。
+
+
+## group_updated
+グループが更新されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+group_updated: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される。
+
+
+## group_deleted
+グループが削除されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+group_deleted: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される。
+
+
+## user_created
+ユーザーが作成されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+user_created: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される
+
+
+## user_updated
+ユーザーが更新されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+user_updated: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される
+
+
+## user_deleted
+ユーザーが削除されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+user_deleted: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される
+
+
+## user_promoted
+ユーザーがシステム管理者に昇格されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+user_promoted: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される
+
+
+## user_demoted
+ユーザーがシステム管理者から降格されたときに発火されるシグナル。
+
+#### シグネチャ
+```python[signals.py]
+user_demoted: blinker.NamedSignal
+```
+
+#### 依存するライブラリ
+- **blinker**: シグナル機能を提供するために使用される。
diff --git a/docs/content/01.detailed/03.entities/.navigation.yml b/docs/content/01.detailed/03.entities/.navigation.yml
new file mode 100644
index 00000000..de2e6d71
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/.navigation.yml
@@ -0,0 +1,2 @@
+title: エンティティ
+
diff --git a/docs/content/01.detailed/03.entities/01.auth.md b/docs/content/01.detailed/03.entities/01.auth.md
new file mode 100644
index 00000000..c61cabbd
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/01.auth.md
@@ -0,0 +1,54 @@
+---
+title: auth
+description: 認証情報に関するエンティティモデルを提供する。
+---
+
+## ClientCredentials
+クライアント認証情報を表すモデル定義。
+リクエストおよびレスポンス、およびデータベース保存において JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[auth.py]
+class ClientCredentials(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------- | ------------------------ |
+| client_id | str | クライアント ID |
+| client_secret | str | クライアントシークレット |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+
+## OAuthToken
+アクセストークン情報を表すモデル定義。
+リクエストおよびレスポンス、およびデータベース保存において JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[auth.py]
+class OAuthToken(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------- | ------------------------ |
+| access_token | str | アクセストークン |
+| token_type | str | トークンタイプ |
+| expires_in | int | トークンの有効期限(秒) |
+| refresh_token | str | リフレッシュトークン |
+| scope | str | スコープ |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
diff --git a/docs/content/01.detailed/03.entities/02.login-user.md b/docs/content/01.detailed/03.entities/02.login-user.md
new file mode 100644
index 00000000..85db512f
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/02.login-user.md
@@ -0,0 +1,129 @@
+---
+title: login_user
+description: 当システムのログインユーザーに関するスキーマおよびエンティティモデルを提供する。
+---
+
+## LoginUser
+ログインユーザーの情報を持つクラス
+
+#### シグネチャ
+```python[login_user.py]
+class LoginUser(pydantic.BaseModel, flask_login.UserMixin):
+```
+
+#### 依存するライブラリ
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+- `pydantic.BaseModel`
+- `flask_login.UserMixin`
+
+#### 属性
+| 名前 | 型 | 属性 |
+| ----------- | --- | ------------- |
+| _session_id | str | セッション ID |
+
+#### クラス属性
+| 名前 | 型 | 属性 |
+| ------------ | --- | ------------------------------------- |
+| eppn | str | ログインユーザーの ePPN |
+| login_date | str | ISO 8601 形式で表現されたログイン日時 |
+| is_member_of | str | Shibboleth の isMemberOf 属性 |
+| user_name | str | ログインユーザーの名前 |
+| map_id | str | ユーザーリソースの ID |
+| session_id | str | セッション ID |
+
+
+#### 算出プロパティ
+
+| 名前 | 型 | 属性 |
+| --------------- | ---- | -------------------------------------- |
+| is_system_admin | bool | システム管理者であるかを示すプロパティ |
+
+#### プロパティ
+| 名前 | 型 | 属性 |
+| ---------------------- | --------------- | ------------------------------------ |
+| is_active | Literal\[True] | (継承)常に True を返す。 |
+| is_authenticated | Literal\[True] | (継承)常に True を返す。 |
+| is_anonymous | Literal\[False] | (継承)常に False を返す。 |
+| permitted_repositories | set\[str] | アクセス可能なリポジトリ ID のリスト |
+
+#### メソッド
+
+| 名前 | 型 | 属性 |
+| ------ | --- | ------------------------------------------ |
+| get_id | str | (オーバーライド)ユーザー識別子を取得する |
+
+
+### get_id
+Flask-Login のユーザーローダーがユーザー識別子を取得するために使用される。
+ePPN をユーザー識別子として返す。
+
+#### シグネチャ
+```python[login_user.py]
+@override
+class get_id(self) -> str:
+```
+
+#### デコレータ
+- `@override`{lang=python}: メソッドがスーパークラスのメソッドをオーバーライドしていることを示すデコレータ。
+
+#### 戻り値
+| 型 | 説明 |
+| --- | ----------------------- |
+| str | ログインユーザーの ePPN |
+
+#### 処理方法
+1. `eppn` 属性を戻り値として返す
+
+
+### is_system_admin
+ユーザーがシステム管理者であるかを判定するプロパティ。
+
+#### シグネチャ
+```python[login_user.py]
+@computed_field
+@cached_property
+def is_system_admin(self) -> bool:
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### デコレータ
+- `@computed_field`{lang=python}: Pydantic の算出フィールドを定義するデコレータ。
+- `@cached_property`{lang=python}: プロパティの値をキャッシュするためのデコレータ。
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---- | ------------------------------------- |
+| bool | ユーザーがシステム管理者であれば True |
+
+#### 処理内容
+1. [`services.utils:extract_group_ids`](../05.services/09.utils.md#extract_group_ids) を呼び出し、ユーザーの所属するグループ ID を取得する。
+2. グループ ID の中にシステム管理者のグループ ID が含まれているかを確認し、含まれていれば `True` を返し、そうでなければ `False` を返す。
+
+
+### permitted_repositories
+ユーザーがアクセス可能なリポジトリ ID の集合を返すプロパティ。
+
+#### シグネチャ
+```python[login_user.py]
+@property
+def permitted_repositories(self) -> set[str]:
+```
+
+#### デコレータ
+- `@property`{lang=python}: プロパティを定義するデコレータ。
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------- | -------------------------- |
+| set\[str] | アクセス可能なリポジトリID |
+
+#### 処理内容
+1. [`services.utils:get_permitted_repository_ids`](../05.services/09.utils.md#get_permitted_repository_ids) を呼び出し、ユーザーがアクセス可能なリポジトリ ID の集合を取得する。
+2. 取得したリポジトリ ID の集合を戻り値として返す。
diff --git a/docs/content/01.detailed/03.entities/03.map-service.md b/docs/content/01.detailed/03.entities/03.map-service.md
new file mode 100644
index 00000000..c8d2c67a
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/03.map-service.md
@@ -0,0 +1,150 @@
+---
+title: map_service
+description: mAP Core API V2 の Service リソースに対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## MapService
+mAP Core API V2 の Service リソースに対応するモデル定義。
+リクエストおよびレスポンスの JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[map_service.py]
+class MapService(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| -------------- | ------------------------------------------ | ---------------------------------------- |
+| schemas | Sequence\[str] | リソースがサポートするスキーマのリスト |
+| id | str | サービス ID |
+| service_name | str | サービス名 |
+| service_url | str | サービスの URL |
+| suspended | bool | サービスが休止中かどうか |
+| meta | [Meta](#meta) | サービスに関連するメタデータ |
+| entity_id | list\[[ServiceEntityID](#serviceentityid)] | サービスに紐づくエンティティ ID のリスト |
+| administrators | list\[[Administrator](#administrator)] | サービス管理者のリスト |
+| groups | list\[[Group](#group)] | サービスに関連するグループのリスト |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は Service リソースのフィールドに camelCase ⇔ snake_case で対応している。
+- `schemas` 属性の値は読み取り専用であり、
+ 定数 [`MAP_SERVICE_SCHEMA`](../02.foundation/const.md#map_service_schema) をただ一つ含むリストである。
+- `meta` 属性は読み取り専用である。
+
+
+## Meta
+mAP Core API V2 の Service リソースの `meta` フィールドに対応するモデル定義。
+[`MapService`](#mapservice) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_service.py]
+class Meta(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------- | --------------------- |
+| resource_type | Literal\["Service"] | リソースタイプ名 |
+| created | datetime | リソース作成日時 |
+| last_modified | datetime | リソース最終更新日時 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は Service リソースのフィールドに camelCase ⇔ snake_case で対応している。
+- `resource_type` 属性の値は定数 `"Service"` に固定される。
+- `created` および `last_modified` 属性は ISO 8601 形式の日時文字列としてシリアライズされる。
+- すべてのフィールドは読み取り専用である。
+
+
+## ServiceEntityID
+mAP Core API V2 の Service リソースの `entityId` フィールドの要素に対応するモデル定義。
+[`MapService`](#mapservice) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_service.py]
+class ServiceEntityID(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------- |
+| value | str | エンティティ ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+
+## Administrator
+mAP Core API V2 の Service リソースの `administrators` フィールドの要素に対応するモデル定義。
+[`MapService`](#mapservice) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_service.py]
+class Administrator(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | ---------------------------- |
+| ref | str | ユーザーリソースの参照先 URL |
+| display | str | 管理者ユーザーの表示名 |
+| value | str | 管理者ユーザーの ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `ref` 属性は Service リソースにおける `$ref` フィールドに対応する。また、シリアライズに含めない。
+
+
+## Group
+mAP Core API V2 の Service リソースの `groups` フィールドの要素に対応するモデル定義。
+[`MapService`](#mapservice) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_service.py]
+class Group(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | ---------------------------- |
+| ref | str | グループリソースの参照先 URL |
+| display | str | グループの表示名 |
+| value | str | グループの ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `ref` 属性は Service リソースにおける `$ref` フィールドに対応する。また、シリアライズに含めない。
diff --git a/docs/content/01.detailed/03.entities/04.map-group.md b/docs/content/01.detailed/03.entities/04.map-group.md
new file mode 100644
index 00000000..bbdc4969
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/04.map-group.md
@@ -0,0 +1,204 @@
+---
+title: map_group
+description: mAP Core API V2 の Group リソースに対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## MapGroup
+mAP Core API V2 の Group リソースに対応するモデル定義。
+リクエストおよびレスポンスの JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[map_group.py]
+class MapGroup(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---------------------- | --------------------------------------- | -------------------------------------- |
+| schemas | Sequence\[str] | リソースがサポートするスキーマのリスト |
+| id | str | グループ ID |
+| external_id | str | グループの外部識別子 |
+| display_name | str | グループの表示名 |
+| public | bool | グループの公開状態 |
+| description | str | グループの説明 |
+| suspended | bool | グループが休止中かどうか |
+| member_list_visibility | Literal\["Public", "Private", "Hidden"] | メンバーリストの可視性 |
+| meta | [Meta](#meta) | グループに関連するメタデータ |
+| members | list\[[Member](#member)] | グループのメンバーのリスト |
+| administrators | list\[[Administrator](#administrator)] | グループ管理者のリスト |
+| services | list\[[Service](#service)] | グループに関連するサービスのリスト |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は Group リソースのフィールドに camelCase ⇔ snake_case で対応している。
+- `schemas` 属性の値は読み取り専用であり、
+ 定数 [`MAP_GROUP_SCHEMA`](../02.foundation/const.md#map_group_schema) をただ一つ含むリストである。
+- `meta` 属性は読み取り専用である。
+
+
+## Meta
+mAP Core API V2 の Group リソースの `meta` フィールドに対応するモデル定義。
+[`MapGroup`](#mapgroup) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_group.py]
+class Meta(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------- | --------------------- |
+| resource_type | Literal\["Group"] | リソースタイプ名 |
+| created | datetime | リソース作成日時 |
+| last_modified | datetime | リソース最終更新日時 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は Group リソースのフィールドに camelCase ⇔ snake_case で対応している。
+- `resource_type` 属性の値は定数 `"Group"` に固定される。
+- `created` および `last_modified` 属性は ISO 8601 形式の日時文字列としてシリアライズされる。
+- すべてのフィールドは読み取り専用である。
+
+
+## Member
+mAP Core API V2 の Group リソースの `members` フィールドの要素に対応する型エイリアス。
+[`MemberUser`](#memberuser) 及び [`MemberGroup`](#membergroup) のユニオン型として定義される。
+[`MapGroup`](#mapgroup) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_group.py]
+type Member = MemberUser | MemberGroup
+```
+
+#### 注釈
+- `MemberUser` および `MemberGroup` クラスは `type` 属性の値を型識別子( discriminator )に使用する。
+
+## MemberUser
+mAP Core API V2 の Group リソースの `members` フィールドの要素のうち所属ユーザーに対応するモデル定義。
+[`MapGroup`](#mapgroup) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_group.py]
+class MemberUser(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | -------------------------- |
+| ref | str | ユーザーリソースの参照 URL |
+| type | Literal\["User"] | メンバータイプ名 |
+| display | str | ユーザーの表示名 |
+| value | str | ユーザー ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `ref` 属性は Group リソースにおける `$ref` フィールドに対応する。また、シリアライズに含めない。
+- `type` 属性の値は定数 `"User"` に固定される。
+
+
+## MemberGroup
+mAP Core API V2 の Group リソースの `members` フィールドの要素のうち下位グループに対応するモデル定義。
+[`MapGroup`](#mapgroup) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_group.py]
+class MemberGroup(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | -------------------------- |
+| ref | str | グループリソースの参照 URL |
+| type | Literal\["Group"] | メンバータイプ名 |
+| display | str | グループの表示名 |
+| value | str | グループ ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `ref` 属性は Group リソースにおける `$ref` フィールドに対応する。また、シリアライズに含めない。
+- `type` 属性の値は定数 `"Group"` に固定される。
+
+
+## Administrator
+mAP Core API V2 の Group リソースの `administrators` フィールドの要素に対応するモデル定義。
+[`MapGroup`](#mapgroup) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_group.py]
+class Administrator(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | ---------------------------- |
+| ref | str | ユーザーリソースの参照先 URL |
+| display | str | 管理者ユーザーの表示名 |
+| value | str | 管理者ユーザーの ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `ref` 属性は Group リソースにおける `$ref` フィールドに対応する。また、シリアライズに含めない。
+
+
+## Service
+mAP Core API V2 の Group リソースの `services` フィールドの要素に対応するモデル定義。
+[`MapGroup`](#mapgroup) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_group.py]
+class Service(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---------------------- | ------------------- | ---------------------------------------------------- |
+| ref | str | サービスリソースの参照 URL |
+| display | str | サービスの表示名 |
+| value | str | サービス ID |
+| administrator_of_group | int | サービスがグループの管理者であるかどうかを示すフラグ |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は User リソースのフィールドに camelCase ⇔ snake_case で対応している。
+- `ref` 属性は Group リソースにおける `$ref` フィールドに対応する。また、シリアライズに含めない。
diff --git a/docs/content/01.detailed/03.entities/05.map-user.md b/docs/content/01.detailed/03.entities/05.map-user.md
new file mode 100644
index 00000000..0155d986
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/05.map-user.md
@@ -0,0 +1,149 @@
+---
+title: map_user
+description: mAP Core API V2 の User リソースに対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## MapUser
+mAP Core API V2 の User リソースに対応するモデル定義。
+リクエストおよびレスポンスの JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[map_user.py]
+class MapUser(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| -------------------------- | ---------------------- | -------------------------------------- |
+| schemas | Sequence\[str] | リソースがサポートするスキーマのリスト |
+| id | str | ユーザー ID |
+| external_id | str | ユーザーの外部識別子 |
+| user_name | str | ユーザー名 |
+| preferred_language | str | 優先言語 |
+| meta | [Meta](#meta) | ユーザーに関連するメタデータ |
+| edu_person_principal_names | list\[[EPPN](#eppn)] | ユーザーの EPPN のリスト |
+| emails | list\[[Email](#email)] | ユーザーのメールアドレスのリスト |
+| groups | list\[[Group](#group)] | ユーザーが所属するグループのリスト |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は User リソースのフィールドに camelCase ⇔ snake_case で対応している。
+- `schemas` 属性の値は読み取り専用であり、
+ 定数 [`MAP_USER_SCHEMA`](../02.foundation/const.md#map_user_schema) をただ一つ含むリストである。
+- `meta` 属性は読み取り専用である。
+
+
+## Meta
+mAP Core API V2 の User リソースの `meta` フィールドに対応するモデル定義。
+[`MapUser`](#mapuser) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_user.py]
+class Meta(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------- | --------------------------- |
+| resource_type | Literal\["User"] | リソースタイプ名 |
+| created | datetime | リソースの作成日時 |
+| last_modified | datetime | リソースの最終更新日時 |
+| created_by | str | リソース作成者のユーザー ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は User リソースのフィールドに camelCase ⇔ snake_case で対応している。
+- `resource_type` 属性の値は定数 `"User"` に固定される。
+- `created` および `last_modified` 属性は ISO 8601 形式の日時文字列としてシリアライズされる。
+- すべてのフィールドは読み取り専用である。
+
+
+## EPPN
+mAP Core API V2 の User リソースの `eduPersonPrincipalNames` フィールドの要素に対応するモデル定義。
+[`MapUser`](#mapuser) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_user.py]
+class EPPN(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------- | --------------------- |
+| value | str | EPPN の値 |
+| idp_entity_id | str | IdP のエンティティ ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は eduPersonPrincipalNames フィールドのサブフィールドに camelCase ⇔ snake_case で対応している。
+
+
+## Email
+mAP Core API V2 の User リソースの `emails` フィールドの要素に対応するモデル定義。
+[`MapUser`](#mapuser) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_user.py]
+class Email(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------- |
+| value | str | メールアドレスの値 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+
+## Group
+mAP Core API V2 の User リソースの `groups` フィールドの要素に対応するモデル定義。
+[`MapUser`](#mapuser) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[map_user.py]
+class Group(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | -------------------------- |
+| value | str | グループ ID |
+| ref | str | グループリソースの参照 URL |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `ref` 属性は User リソースにおける `$ref` フィールドに対応する。
diff --git a/docs/content/01.detailed/03.entities/06.map-error.md b/docs/content/01.detailed/03.entities/06.map-error.md
new file mode 100644
index 00000000..03931066
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/06.map-error.md
@@ -0,0 +1,35 @@
+---
+title: map_error
+description: mAP Core API V2 の Error レスポンスに対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## MapError
+mAP Core API V2 のエラーレスポンスに対応するモデル定義。
+レスポンスボディの JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[map_error.py]
+class MapError(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---------- | -------------- | -------------------------------------- |
+| schemas | Sequence\[str] | リソースがサポートするスキーマのリスト |
+| status | str | HTTP ステータスコード |
+| scim_type | str | SCIM エラータイプ |
+| detail | str | エラーの詳細説明 |
+| error_code | int \| None | エラーコード(未使用) |
+
+#### 注釈
+- すべての属性は Error レスポンスのフィールドに camelCase ⇔ snake_case で対応している。
+- `schemas` 属性の値は読み取り専用であり、
+ 定数 [`MAP_ERROR_SCHEMA`](../02.foundation/const.md#map_error_schema) をただ一つ含むリストである。
+- すべてのフィールドは読み取り専用である。
diff --git a/docs/content/01.detailed/03.entities/07.search-request.md b/docs/content/01.detailed/03.entities/07.search-request.md
new file mode 100644
index 00000000..eb990dda
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/07.search-request.md
@@ -0,0 +1,121 @@
+---
+title: search_request
+description: mAP Core API V2 の 検索リクエストボディに対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## SearchRequestParameter
+mAP Core API V2 の検索リクエストのクエリパラメータに対応するモデル定義。
+リクエストボディの Python オブジェクトと JSON 間のシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[search_request.py]
+class SearchRequestParameter(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ----------------------------------- | -------------------------- |
+| filter | str | 検索クエリのフィルタ条件 |
+| start_index | int | 検索結果の開始インデックス |
+| count | int | 検索結果の最大件数 |
+| sort_by | str | 検索結果のソート条件 |
+| sort_order | Literal\["ascending", "descending"] | 検索結果のソート順序 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+
+#### 注釈
+- すべての属性は リクエストのクエリパラメータのフィールドに camelCase ⇔ snake_case で対応している。
+
+
+## SearchResponse
+mAP Core API V2 の検索リクエストのレスポンスボディに対応するモデル定義。
+レスポンスボディの JSON と Python オブジェクト間のデシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[search_request.py]
+class SearchResponse[T: BaseModel](BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| -------------- | ------------------- | -------------------------------------- |
+| schemas | Sequence\[str] | リソースがサポートするスキーマのリスト |
+| total_results | int | 検索結果の総件数 |
+| start_index | int | 検索結果の開始インデックス |
+| items_per_page | int | 1ページあたりの検索結果件数 |
+| resources | list\[T\] | 検索結果のリソースのリスト |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `resources` 属性を除き 検索結果 レスポンスボディのフィールドに camelCase ⇔ snake_case で対応している。
+ `resources` 属性は `Resource` フィールドに対応する。
+- `schemas` 属性は読み取り専用であり、
+ 定数 [`MAP_LIST_RESPONSE_SCHEMA`](../02.foundation/const.md#map_list_response_schema) をただ一つ含むリストである。
+- `resources` 属性は検索結果のリソースのリストであり、`pydantic.BaseModel` を継承した任意のモデルを要素の型として使用できる。
+
+
+## SearchResult
+アプリケーション の API が検索リクエストのレスポンスボディに使用するモデル定義。
+レスポンスボディの Python オブジェクトと JSON 間のシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[search_request.py]
+class SearchResult[T: BaseModel](BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------------- |
+| total | int | 検索結果の総件数 |
+| page_size | int | 1ページあたりの検索結果件数 |
+| offset | int | 検索結果の開始インデックス |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性は 検索結果のレスポンスボディのフィールドに camelCase ⇔ snake_case で対応している。
+- `resources` 属性は検索結果のリソースのリストであり、`pydantic.BaseModel` を継承した任意のモデルを要素の型として使用できる。
+
+
+## FilterOption
+各エンティティの一覧表示のフィルター選択肢
+
+#### シグネチャ
+```python[summaries.py]
+class FilterOption(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ----------- | ------------------------------------ | ---------------------- |
+| key | str | クエリパラメータ |
+| discription | str | クエリパラメータの説明 |
+| type | Literal\["string", "number", "date"] | フィルターの値の型 |
+| multiple | bool | 複数選択が可能であるか |
+| items | list\[Mapping\[str, str \| int]] | フィルターの値とラベル |
diff --git a/docs/content/01.detailed/03.entities/08.patch-request.md b/docs/content/01.detailed/03.entities/08.patch-request.md
new file mode 100644
index 00000000..4bf01d9e
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/08.patch-request.md
@@ -0,0 +1,135 @@
+---
+title: patch_request
+description: mAP Core API V2 の PATCH リクエストボディに対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## PatchRequestPayload
+mAP Core API V2 の PATCH リクエストボディに対応するモデル定義。
+Python オブジェクトからリクエストボディの JSON へのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[patch_request.py]
+class PatchRequestPayload[T](BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ---------------------------------------- | ---------------------------- |
+| schemas | Sequence\[str] | リクエストのスキーマのリスト |
+| operations | list\[[PatchOperation](#patchoperation)] | PATCH 操作のリスト |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `operations` 属性は PATCH リクエストの `Operations` フィールドに対応する。
+- `schemas` 属性の値は読み取り専用であり、
+ 定数 [`MAP_PATCH_SCHEMA`](../02.foundation/const.md#map_patch_schema) をただ一つ含むリストである。
+- このクラスはジェネリッククラスであり、`T` は `pydantic.BaseModel` を継承した任意のモデルクラスを受け入れる。
+ どのモデルクラスに対するリクエストボディであるか、静的解析向けに情報を保持するために使用される。
+
+
+## PatchOperation
+mAP Core API V2 の PATCH リクエストの `Operations` フィールド内の各操作に対応する型エイリアス。
+[`AddOperation`](#addoperation) 、[`RemoveOperation`](#removeoperation) 、[`ReplaceOperation`](#replaceoperation) のユニオン型として定義される。
+[`PatchRequestPayload`](#patchrequestpayload) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[patch_request.py]
+type PatchOperation[T] = AddOperation[T] | RemoveOperation[T] | ReplaceOperation[T]
+```
+
+#### 注釈
+- `AddOperation` 、`RemoveOperation` 、`ReplaceOperation` クラスは `op` 属性の値を型識別子( discriminator )に使用する。
+- このクラスはジェネリッククラスであり、`T` は `pydantic.BaseModel` を継承した任意のモデルクラスを受け入れる。
+ どのモデルクラスに対するリクエストボディであるか、静的解析向けに情報を保持するために使用される。
+
+
+## AddOperation
+mAP Core API V2 の PATCH リクエストの `Operations` フィールド内の `add` 操作に対応するモデル定義。
+[`PatchRequestPayload`](#patchrequestpayload) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[patch_request.py]
+class AddOperation[T](BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------- |
+| op | Literal\["add"] | 操作タイプ名 |
+| path | str \| None | 操作対象のフィールド |
+| value | Any | 操作で使用する値 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `op` 属性の値は定数 `"add"` に固定される。
+- このクラスはジェネリッククラスであり、`T` は `pydantic.BaseModel` を継承した任意のモデルクラスを受け入れる。
+ どのモデルクラスに対するリクエストボディであるか、静的解析向けに情報を保持するために使用される。
+
+
+## RemoveOperation
+mAP Core API V2 の PATCH リクエストの `Operations` フィールド内の `remove` 操作に対応するモデル定義。
+[`PatchRequestPayload`](#patchrequestpayload) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[patch_request.py]
+class RemoveOperation[T](BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------- |
+| op | Literal\["remove"] | 操作タイプ名 |
+| path | str | 操作対象のフィールド |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `op` 属性の値は定数 `"remove"` に固定される。
+- このクラスはジェネリッククラスであり、`T` は `pydantic.BaseModel` を継承した任意のモデルクラスを受け入れる。
+ どのモデルクラスに対するリクエストボディであるか、静的解析向けに情報を保持するために使用される。
+
+
+## ReplaceOperation
+mAP Core API V2 の PATCH リクエストの `Operations` フィールド内の `replace` 操作に対応するモデル定義。
+[`PatchRequestPayload`](#patchrequestpayload) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[patch_request.py]
+class ReplaceOperation[T](BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------- |
+| op | Literal\["replace"] | 操作タイプ名 |
+| path | str | 操作対象のフィールド |
+| value | Any | 操作で使用する値 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `op` 属性の値は定数 `"replace"` に固定される。
+- このクラスはジェネリッククラスであり、`T` は `pydantic.BaseModel` を継承した任意のモデルクラスを受け入れる。
+ どのモデルクラスに対するリクエストボディであるか、静的解析向けに情報を保持するために使用される。
diff --git a/docs/content/01.detailed/03.entities/09.bulk-request.md b/docs/content/01.detailed/03.entities/09.bulk-request.md
new file mode 100644
index 00000000..ca277eb0
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/09.bulk-request.md
@@ -0,0 +1,101 @@
+---
+title: bulk_request
+description: mAP Core API V2 の Bulk リクエストボディに対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## BulkRequestPayload
+mAP Core API V2 の Bulk リクエストボディに対応するモデル定義。
+Python オブジェクトからリクエストボディの JSON へのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[bulk_request.py]
+class BulkRequestPayload(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| -------------- | -------------------------------------- | ---------------------------------- |
+| schemas | Sequence\[str] | リクエストのスキーマのリスト |
+| operations | list\[[BulkOperation](#bulkoperation)] | Bulk 操作のリスト |
+| fail_on_errors | int | 処理を中断せず許容するエラーの件数 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `operations` 属性は Bulk リクエストの `Operations` フィールドに対応する。
+- `fail_on_errors` 属性は Bulk リクエストの `failOnErrors` フィールドに対応する。
+- `schemas` 属性の値は読み取り専用であり、
+ 定数 [`MAP_BULK_REQUEST_SCHEMA`](../02.foundation/const.md#map_bulk_request_schema) をただ一つ含むリストである。
+
+
+## BulkResponse
+mAP Core API V2 の Bulk レスポンスボディに対応するモデル定義。
+レスポンスボディの JSON から Python オブジェクトへのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[bulk_request.py]
+class BulkResponse(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | -------------------------------------- | ---------------------------- |
+| schemas | Sequence\[str] | レスポンスのスキーマのリスト |
+| operations | list\[[BulkOperation](#bulkoperation)] | Bulk 操作のリスト |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `operations` 属性は Bulk レスポンスの `Operations` フィールドに対応する。
+- `schemas` 属性の値は読み取り専用であり、
+ 定数 [`MAP_BULK_RESPONSE_SCHEMA`](../02.foundation/const.md#map_bulk_response_schema) をただ一つ含むリストである。
+
+
+## BulkOperation
+mAP Core API V2 の Bulk リクエストの `Operations` フィールド内の各操作に対応する型エイリアス。
+
+#### シグネチャ
+```python[bulk_request.py]
+class BulkOperation[D, R](BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | --------------------------------------- | -------------------------------------------------------------- |
+| method | Literal\["POST","PUT","PUTCH","DELETE"] | 実行するメソッド |
+| bulk_id | str | POST の際に一括リクエスト内で使用できる仮 ID |
+| path | str | リクエストを行うエンドポイントのパス |
+| data | D | 操作で使用する値 単一でリクエストを行う場合のリクエストボディ |
+| location | str | リソースのエンドポイント POST の失敗時は None |
+| response | R | 単一でリクエストを行った場合のレスポンス |
+| status | str | 単一でリクエストを行った場合のステータスコード |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `location` 属性、 `response` 属性、 `status` 属性の値はレスポンスボディのデシリアライズのみに使用される。
+- `data` 属性の型は `pydantic.BaseModel` を継承した以下のモデルクラスを想定している。
+ - [`MapService`](./03.map-service.md#mapservice)
+ - [`MapGroup`](./04.map-group.md#mapgroup)
+ - [`MapUser`](./05.map-user.md#mapuser)
+ - [`PatchOperation`](./08.patch-request.md#patchoperation)
+- `response` 属性の型は `pydantic.BaseModel` を継承した以下のモデルクラスを想定している。
+ - [`MapService`](./03.map-service.md#mapservice)
+ - [`MapGroup`](./04.map-group.md#mapgroup)
+ - [`MapUser`](./05.map-user.md#mapuser)
+ - [`MapError`](./06.map-error.md#maperror)
diff --git a/docs/content/01.detailed/03.entities/10.summaries.md b/docs/content/01.detailed/03.entities/10.summaries.md
new file mode 100644
index 00000000..d2e49048
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/10.summaries.md
@@ -0,0 +1,91 @@
+---
+title: summaries
+description: 当システムの一覧表示に対応するスキーマおよびエンティティモデルを提供する。
+---
+
+## RepositorySummary
+リポジトリの一覧表示に用いるモデル定義。
+レスポンスボディの Python オブジェクトと JSON 間のシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[repository_summary.py]
+class RepositorySummary(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | ----------------------------------------------- |
+| id | str | リポジトリ ID |
+| service_name | str | リポジトリに対応するサービス( SP コネクタ)名 |
+| service_url | pydantic.HttpUrl | リポジトリに対応するサービスの URL |
+| service_id | str | リポジトリに対応するサービス( SP コネクタ) ID |
+| entity_ids | list\[str] | リポジトリに紐づくエンティティ ID のリスト |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性はリポジトリの一覧表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
+
+
+## GroupSummary
+グループの一覧表示に用いるモデル定義。
+レスポンスボディの Python オブジェクトと JSON 間のシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[group_summary.py]
+class GroupSummary(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| --------------- | ------------------- | ---------------------------------- |
+| id | str | グループ ID |
+| display_name | str | グループの表示名 |
+| repository_name | str | グループが属するリポジトリの表示名 |
+| user_count | int | グループに属するユーザの数 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性はグループの一覧表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
+
+
+## UserSummary
+ユーザの一覧表示に用いるモデル定義。
+レスポンスボディの Python オブジェクトと JSON 間のシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[user_summary.py]
+class UserSummary(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------------------------------------ | ------------------------------ |
+| id | str | ユーザ ID |
+| user_name | str | ユーザのユーザ名 |
+| role | [USER_ROLE](../02.foundation/const.md#user_role) | ユーザのロール |
+| emails | list\[str] | ユーザのメールアドレスのリスト |
+| eppns | list\[str] | ユーザの ePPN のリスト |
+| last_modified | datetime | ユーザ情報の最終更新日時 |
+
+#### 注釈
+- すべての属性はユーザの一覧表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
diff --git a/docs/content/01.detailed/03.entities/11.repository-detail.md b/docs/content/01.detailed/03.entities/11.repository-detail.md
new file mode 100644
index 00000000..7e0b4285
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/11.repository-detail.md
@@ -0,0 +1,45 @@
+---
+title: repository_detail
+description: リポジトリ情報の詳細表示に用いるエンティティモデルを提供する。
+---
+
+## RepositoryDetail
+リポジトリ情報の詳細表示に用いるモデル定義。
+リクエストおよびレスポンスの JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[repository_detail.py]
+class RepositoryDetail(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | ----------------------------------------------- |
+| id | str | リポジトリ ID |
+| service_name | str | リポジトリに対応するサービス( SP コネクタ)名 |
+| service_url | pydantic.HttpUrl | リポジトリに対応するサービスの URL |
+| active | bool | リポジトリがに対応する SP コネクタの稼働状態 |
+| service_id | str | リポジトリに対応するサービス( SP コネクタ) ID |
+| entity_ids | list\[str] | リポジトリに紐づくエンティティ ID のリスト |
+| created | datetime | SP コネクタの作成日時 |
+| users_count | int | リポジトリに紐づくユーザの数 |
+| groups_count | int | リポジトリに紐づくグループの数 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 属性
+
+| 名前 | 型 | 説明 |
+| ----------- | ---------- | -------------------------------------------------------- |
+| _groups | list\[str] | (プライベート)リポジトリに紐づくグループのリスト |
+| _rolegroups | list\[str] | (プライベート)リポジトリに紐づくロールグループのリスト |
+| _admins | list\[str] | (プライベート)リポジトリに紐づく管理者のリスト |
+
+#### 注釈
+- すべての属性はリポジトリ情報の詳細表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
diff --git a/docs/content/01.detailed/03.entities/12.group-detail.md b/docs/content/01.detailed/03.entities/12.group-detail.md
new file mode 100644
index 00000000..af56c95f
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/12.group-detail.md
@@ -0,0 +1,74 @@
+---
+title: group_detail
+description: グループ情報の詳細表示に用いるエンティティモデルを提供する。
+---
+
+## GroupDetail
+グループ情報の詳細表示に用いるモデル定義。
+リクエストおよびレスポンスの JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[group_detail.py]
+class GroupDetail(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---------------------- | --------------------------------------- | ---------------------------------------------------------- |
+| id | str | グループ ID |
+| user_defined_id | str | グループのユーザ定義 ID (作成時用) |
+| display_name | str | グループの表示名 |
+| description | str | グループの説明 |
+| public | bool | グループが公開されているかどうかを示すフラグ |
+| member_list_visibility | Literal\["Public", "Private", "Hidden"] | メンバーリストの可視性 |
+| repository | [Repository](#repository) | グループに関連するリポジトリの情報 |
+| type | Literal\["group", "rolegroup"] | グループのタイプ(ユーザー定義グループかロールグループか) |
+| created | datetime | グループの作成日時 |
+| users_count | int | グループに所属するユーザの数 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 属性
+
+| 名前 | 型 | 説明 |
+| --------- | ---------- | -------------------------------------------------- |
+| _users | list\[str] | (プライベート)グループに所属するユーザのリスト |
+| _admins | list\[str] | (プライベート)グループの管理者のリスト |
+| _services | list\[str] | (プライベート)グループが接続するサービスのリスト |
+
+
+#### 注釈
+- すべての属性はグループ情報の詳細表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
+
+
+## Repository
+グループ情報の詳細表示に用いるリポジトリ情報のモデル定義。
+[`GroupDetail`](#groupdetail) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[group_detail.py]
+class Repository(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | ---------------------------------------------- |
+| id | str | リポジトリ ID |
+| service_name | str | リポジトリに対応するサービス( SP コネクタ)名 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性はリポジトリ情報の詳細表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
diff --git a/docs/content/01.detailed/03.entities/13.user-detail.md b/docs/content/01.detailed/03.entities/13.user-detail.md
new file mode 100644
index 00000000..f606e224
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/13.user-detail.md
@@ -0,0 +1,65 @@
+---
+title: user_detail
+description: ユーザー情報の詳細表示に用いるエンティティモデルを提供する。
+---
+
+## UserDetail
+ユーザー情報の詳細表示に用いるモデル定義。
+リクエストおよびレスポンスの JSON と Python オブジェクト間のシリアライズ・デシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[user_detail.py]
+class UserDetail(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------------ | ------------------------------------------------------ | -------------------------------------- |
+| id | str | ユーザ ID |
+| eppns | list\[str] | ユーザの EPPN のリスト |
+| user_name | str | ユーザのユーザ名 |
+| emails | list\[pydantic.EmailStr] | ユーザのメールアドレスのリスト |
+| preferred_language | Literal\["en", "ja"] | ユーザの優先言語 |
+| is_system_admin | bool | ユーザがシステム管理者かどうか |
+| repository_roles | list\[[RepositoryRole](#repositoryrole)\] | ユーザの所属リポジトリとロールのリスト |
+| groups | list\[[GroupSummary](./10.summaries.md)#groupsummary\] | ユーザが所属するグループのリスト |
+| created | datetime | ユーザの作成日時 |
+| last_modified | datetime | ユーザの最終更新日時 |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性はユーザ情報の詳細表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
+
+
+## RepositoryRole
+ユーザー情報の詳細表示に用いる所属リポジトリとロールのモデル定義。
+[`UserDetail`](#userdetail) クラスのネストした属性として使用される。
+
+#### シグネチャ
+```python[user_detail.py]
+class RepositoryRole(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------------------------------------ | ---------------------------------------------- |
+| id | str | リポジトリ ID |
+| service_name | str | リポジトリに対応するサービス( SP コネクタ)名 |
+| user_role | [USER_ROLE](../02.foundation/const.md#user_role) | ユーザのリポジトリ内でのロール |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性はユーザ情報の詳細表示に用いる JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
diff --git a/docs/content/01.detailed/03.entities/15.bulk.md b/docs/content/01.detailed/03.entities/15.bulk.md
new file mode 100644
index 00000000..65b28d3e
--- /dev/null
+++ b/docs/content/01.detailed/03.entities/15.bulk.md
@@ -0,0 +1,102 @@
+---
+title: bulk
+description: 当システムの一括操作に関するスキーマおよびエンティティモデルを提供する。
+---
+## RepositoryMember
+データ検証に用いるデータのモデルクラス
+
+#### シグネチャ
+```python[bulk.py]
+class RepositoryMember(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+- `pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------ | ---------- | ------------------------------------------------ |
+| groups | list\[str] | 選択されたリポジトリに属するグループ ID のリスト |
+| ids | list\[str] | 選択されたリポジトリに属するユーザー ID のリスト |
+
+
+## ValidateSummary
+データ検証の結果を表示するためのクラス
+
+#### シグネチャ
+```python[bulk.py]
+class ValidateSummary(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+- `pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ---------------------------------- | -------------------- |
+| check_result | list\[[CheckResult](#checkresult)] | ユーザー毎の検証結果 |
+| create | int | 作成件数 |
+| update | int | 更新件数 |
+| delete | int | 削除件数 |
+| skip | int | 更新なし件数 |
+| error | int | エラー件数 |
+
+
+### CheckResult
+
+#### シグネチャ
+```python[bulk.py]
+class CheckResult(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+- `pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| --------- | ---------------------------------------------------- | ------------------------------ |
+| user_id | str | 操作対象のユーザー ID |
+| eppn | str | 操作対象のユーザー eppn |
+| user_name | str | 操作対象のユーザー名 |
+| groups | list\[str] | 操作後の所属グループ の ID |
+| status | Literal\["create","update","delete","skip", "error"] | 検証結果 |
+| code | str | 検証結果を示すメッセージコード |
+
+
+## ResultSummary
+一括操作の実行結果を示すためのクラス
+
+#### シグネチャ
+```python[bulk.py]
+class ResultSummary(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+- `pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| --------------- | ------------------ | ---------------------------- |
+| result | list\[CheckResult] | ユーザー毎のアップロード結果 |
+| create | int | 作成件数 |
+| update | int | 更新件数 |
+| delete | int | 削除件数 |
+| skip | int | 更新なし件数 |
+| error | int | エラー件数 |
+| file_id | uuid.UUID | ファイル ID |
+| file_name | str | アップロードされたファイル名 |
+| operator | str | アップロード実行ユーザー |
+| start_timestamp | datetime | アップロード開始時間 |
+| end_timestamp | datetime | アップロード終了時間 |
diff --git a/docs/content/01.detailed/04.api/.navigation.yml b/docs/content/01.detailed/04.api/.navigation.yml
new file mode 100644
index 00000000..635e400d
--- /dev/null
+++ b/docs/content/01.detailed/04.api/.navigation.yml
@@ -0,0 +1,2 @@
+title: コントローラ
+
diff --git a/docs/content/01.detailed/04.api/01.router.md b/docs/content/01.detailed/04.api/01.router.md
new file mode 100644
index 00000000..75baf99e
--- /dev/null
+++ b/docs/content/01.detailed/04.api/01.router.md
@@ -0,0 +1,43 @@
+---
+title: api.router
+description: API エンドポイントのルーティング定義を提供する。
+---
+
+## create_api_blueprint
+それぞれの機能の API エンドポイントをひとつの Blueprint にまとめ、ルーティングを定義する。
+また、予期せぬエラーが発生した場合の共通エラーハンドラを登録する。
+
+#### シグネチャ
+```python[router.py]
+def create_api_blueprint() -> Blueprint:
+```
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------- | ------------------------------ |
+| Blueprint | API エンドポイントの Blueprint |
+
+#### 依存するライブラリ
+- **Flask**: Blueprint およびエラーハンドラの定義に使用。
+
+#### 処理概要
+1. API エンドポイントの `Blueprint` インスタンスを生成する。名前は `"api"` とする。
+ URL プレフィックスは [`JAIROCloudGroupsManager.init_app`](../02.foundation/ext.md#init_app) メソッドで `/api` として登録される。
+2. 各機能モジュールから Blueprint をインポートし、生成した API Blueprint に登録する。
+ URL のプレフィックスはモジュール名を用いて `/` とする。
+3. 予期せぬエラーが発生した場合処理を共通エラーハンドラとして登録する。
+ レスポンスは [`ErrorResponse`](./11.schemas.md#errorresponse) と Flask-Pydantic の `@validate`{lang=python} デコレータでシリアライズし、ステータスコードとともに返却する。
+ - [`JAIROCloudGroupsManagerError`](../02.foundation/exc.md#jairocloudgroupsmanagererror) が発生した場合はステータスコード 500 を返す。
+ レスポンスボディのコードはエラーのインスタンスに設定されたメッセージリソースのコードを使用する。
+ メッセージは予期せぬエラーが発生した旨のメッセージで統一する。
+ - [`InfrastructureError`](../02.foundation/exc.md#infrastructureerror) 、 [`ServiceSettingsError`](../02.foundation/exc.md#servicesettingserror) 、
+ および [`SystemAdminNotFound`](../02.foundation/exc.md#systemadminnotfound) が発生した場合はステータスコード 503 を返す。
+ レスポンスボディのコードはエラーのインスタンスに設定されたメッセージリソースのコードを使用し、
+ メッセージは一時的にサービスが利用できない旨のメッセージで統一する。
+ - [`ApiRequestError`](../02.foundation/exc.md#apirequesterror) が発生した場合はステータスコード 400 を返す。
+ レスポンスボディのコードとメッセージはエラーのインスタンスに設定されたメッセージリソースのコードとメッセージを使用する。
+4. リクエスト処理前のハンドラーとして、 [`auth:refresh_session`](../02.foundation/auth.md#refresh_session) を登録する。
+5. ログインが必要なエンドポイントに対して、未ログインのクライアントへのレスポンスを処理するハンドラーを登録する。
+ ステータスコードは 401 とし、レスポンスボディのコードとメッセージはログインが必要である旨のメッセージリソースのものを使用する。
+6. API Blueprint を戻り値として返す。
diff --git a/docs/content/01.detailed/04.api/02.auth.md b/docs/content/01.detailed/04.api/02.auth.md
new file mode 100644
index 00000000..5d071de5
--- /dev/null
+++ b/docs/content/01.detailed/04.api/02.auth.md
@@ -0,0 +1,138 @@
+---
+title: api.auth
+description: 認証・セッション関連の API エンドポイントを提供する。
+---
+
+## bp
+認証・セッション関連の API を提供する Blueprint インスタンス。名前は `"auth"` とする。
+URL プレフィックスは [`router:create_api_blueprint`](./01.router.md#create_api_blueprint) によって `/auth` に設定される。
+
+#### シグネチャ
+```python[auth.py]
+bp: Blueprint
+```
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+## check
+セッションの有効性を確認するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[auth.py]
+@bp.get("/check")
+@login_required
+@validate(response_by_alias=True, exclude_none=True)
+def check() -> tuple[LoginUserState, int]:
+```
+
+#### エンドポイント
+**GET** /api/auth/check
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------- |
+| tuple\[[LoginUserState](./11.schemas.md#loginuserstate), Literal[200]] | ログインユーザーの状態を表すモデルクラスとステータスコード |
+
+#### 処理内容
+1. Flask-Login の `current_user` をもとにログインユーザーの状態を表す
+ [`LoginUserState`](./11.schemas.md#loginuserstate) のインスタンスを生成し、ステータスコード 200 とともに返す。
+
+
+## login
+ログイン機能を提供する。
+
+#### シグネチャ
+```python[auth.py]
+@bp.get("/login")
+def login() -> Response:
+```
+
+#### エンドポイント
+**GET** /api/auth/login
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------- | -------------------------------------- |
+| Response | トップページへのリダイレクトレスポンス |
+
+#### 処理内容
+1. リクエストヘッダーから以下の Shibboleth のクライアントの属性情報を取得する。
+ - **ePPN**: ユーザーの edupersonPrincipalName (ePPN) 。
+ 定数 [`SHIB_HEADERS.EPPNP`](../02.foundation/const.md#shib_headerseppn) をキーに取得する。
+ - **isMemberOf**: クラウドゲートウェイサービス上でユーザーが所属グループ。複数ある場合はカンマ区切りで記述される。
+ 定数 [`SHIB_HEADERS.IS_MEMBER_OF`](../02.foundation/const.md#shib_headersis_member_of) をキーに取得する。
+ - **displayName**: ユーザーの表示名。定数 [`SHIB_HEADERS.DISPLAY_NAME`](../02.foundation/const.md#shib_headersdisplay_name) をキーに取得する。
+2. ePPN が取得できない場合は、ログに警告を記録し、トップページへのリダイレクトレスポンスを返す。
+ クエリパラメータに `{"error": 401}`{lang=json} を付与する。
+3. ePPN をもとに [`services.users:get_by_eppn`](../05.services/05.users.md#get_by_eppn) でユーザー情報を取得する。
+4. 取得できなければ、ログに警告を記録し、トップページへのリダイレクトレスポンスを返す。
+ クエリパラメータに `{"error": 403}`{lang=json} を付与する。
+5. isMemberOf が取得できなければ、取得したユーザー情報に含まれる所属グループのリストから
+ `"/gr/"` の形式で isMemberOf 相当するの値を生成する。
+6. isMemberOf を引数に [`services.utils:extract_group_ids`](../05.services/09.utils.md#extract_group_ids) でグループ ID を取得する。
+7. グループ ID をもとに [`services.utils:detect_affiliations`](../05.services/09.utils.md#detect_affiliations) を呼び出し、
+ 所属するロールグループを判定する。
+8. 「システム管理者」、あるいは「リポジトリ管理者」のロールグループに所属しているかを確認し、所属していない場合は、
+ ログに警告を記録し、トップページへのリダイレクトレスポンスを返す。クエリパラメータに `{"error": 403}`{lang=json} を付与する。
+9. Shibboleth の属性情報と取得したユーザー情報をもとに [`LoginUser`](../03.entities/02.login-user.md#loginuser) のインスタンスを生成する。
+10. 作成したログインユーザーのインスタンスを引数に `flask_login.login_user` を呼び出し、ログインセッションを開始する。
+11. リクエストコンテキストに設定されたセッション ID を `flask.session` から取得し
+ [`LoginUser`](../03.entities/02.login-user.md#loginuser) の `session_id` 属性の値とする。
+12. セッション ID をもとに [`build_account_store_key`](../02.foundation/auth.md#build_account_store_key) を呼び出し、戻り値をキーにアカウントストアへログインユーザーのインスタンスの各属性をハッシュ型で保存する。
+13. トップページへのリダイレクトレスポンスを返す。リクエストに `next` クエリパラメータがある場合は、再度クエリパラメータに `{"next": }`{lang=json} を付与する。
+
+#### 備考
+isMemberOf 属性は `"https://cg.gakunin.jp/gr/"` のように URL 形式で記述されている
+
+
+## logout
+ログアウト機能を提供する。
+
+#### シグネチャ
+```python[auth.py]
+@bp.post("/logout")
+def logout() -> Response:
+```
+
+#### エンドポイント
+**GET** /api/auth/logout
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---------------------------------- | --------------------------------------------- |
+| tuple\[Literal\[""], Literal[204]] | 空のレスポンスとステータスコード 204 を返す。 |
+
+#### 処理内容
+1. ログインユーザーからセッション ID を取得する。
+2. セッション ID を引数に [`build_account_store_key`](../02.foundation/auth.md#build_account_store_key) を呼び出しキーを取得する。
+3. キーをもとにアカウントストアからセッション情報を削除する。
+4. `flask_login.logout_user` を呼び出し、ログアウト処理を行う。
+5. 空のレスポンスとステータスコード 204 を返す。
diff --git a/docs/content/01.detailed/04.api/03.callback.md b/docs/content/01.detailed/04.api/03.callback.md
new file mode 100644
index 00000000..a9209aba
--- /dev/null
+++ b/docs/content/01.detailed/04.api/03.callback.md
@@ -0,0 +1,55 @@
+---
+title: api.callback
+description: コールバックでアクセスされる API エンドポイントを提供する。
+---
+
+## bp
+コールバック関連の API を提供する Blueprint インスタンス。名前は `"callback"` とする。
+URL プレフィックスは [`router:create_api_blueprint`](./01.router.md#create_api_blueprint) によって `/callback` に設定される。
+
+#### シグネチャ
+```python[callback.py]
+bp: Blueprint
+```
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+
+## auth_code
+コールバックで認可コードを受け取るエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[callback.py]
+@bp.get("/auth-code")
+@validate()
+def auth_code(query: OAuthTokenQuery) -> tuple[t.Literal[""], int]:
+```
+
+#### エンドポイント
+**GET** /api/callback/auth-code
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | -------------------------------------------------- | -------------------------------- |
+| query | [OAuthTokenQuery](./11.schemas.md#oauthtokenquery) | 認可コードを含むクエリパラメータ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----------------------------------- | ----------------------------------------------- |
+| tuple\[Literal\[""], Literal\[200]] | 空のレスポンスとステータスコード 200 を返す。 |
+| tuple\[Literal\[""], Literal\[202]] | アクセストークンの発行に失敗すれば 202 を返す。 |
+
+#### 処理内容
+1. [`service.token:issue_access_token`](../05.services/02.token.md#issue_access_token) を呼び出し、引数 `query` に含まれる認可コード `code` を使用してアクセストークンの発行を試みる。
+2. [`DatabaseError`](../02.foundation/exc.md#databaseerror) 、 [`CredentialsError`](../02.foundation/exc.md#credentialserror) や [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) が送出された場合は、トレースバックを出力する。
+3. アクセストークンの発行の成否に応じて、空のレスポンスとともにステータスコード 200 または 202 を返す。
diff --git a/docs/content/01.detailed/04.api/04.search.md b/docs/content/01.detailed/04.api/04.search.md
new file mode 100644
index 00000000..b75397b0
--- /dev/null
+++ b/docs/content/01.detailed/04.api/04.search.md
@@ -0,0 +1,66 @@
+---
+title: api.search
+description: クライアントサイドが使用する横断検索 API を提供する。
+---
+
+## bp
+横断検索 API を提供する Blueprint インスタンス。名前は `"search"` とする。
+URL プレフィックスは [`router:create_api_blueprint`](./01.router.md#create_api_blueprint) によって `/search` に設定される。
+
+#### シグネチャ
+```python[search.py]
+bp: Blueprint
+```
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+
+## get
+横断検索 API を提供するコントローラ。
+
+#### シグネチャ
+```python[search.py]
+@bp.get("/", strict_slashes=False)
+@login_required
+@roles_required(USER_ROLES.SYSTEM_ADMIN, USER_ROLES.REPOSITORY_ADMIN)
+@validate(response_by_alias=True)
+def get(
+ query: GlobalSearchQuery,
+) -> tuple[GlobalSearchResult | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/search
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | ------------------------------------------------------ | ---------------- |
+| query | [GlobalSearchQuery](./11.schemas.md#globalsearchquery) | クエリパラメータ |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------------------------------------------------------------------------ | -------------------------------------------- |
+| tuple\[[GlobalSearchResult](./11.schemas.md#globalsearchresult), Literal[200]] | 横断検索の結果を含むレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal[400]] | 検索条件に不正があった場合のエラーレスポンス |
+
+
+#### 処理内容
+1. クエリパラメータをもとに以下の検索処理を実行する。
+ - リポジトリ検索: [`services.repositories:search`](../05.services/03.repositories.md#search) を呼び出し、リポジトリを検索する。
+ - グループ検索: [`services.groups:search`](../05.services/04.groups.md#search) を呼び出し、グループを検索する。
+ - ユーザー検索: [`services.users:search`](../05.services/05.users.md#search) を呼び出し、ユーザーを検索する。
+2. 各検索処理の結果をもとに [`GlobalSearchResult`](./11.schemas.md#globalsearchresult) のインスタンスを生成し、ステータスコード 200 とともに返す。
+3. 検索が不正なクエリパラメータによって失敗し、どの検索処理も実行できなかった場合は、エラーレスポンスを生成し、ステータスコード 400 とともに返す。
diff --git a/docs/content/01.detailed/04.api/05.repositories.md b/docs/content/01.detailed/04.api/05.repositories.md
new file mode 100644
index 00000000..de37a393
--- /dev/null
+++ b/docs/content/01.detailed/04.api/05.repositories.md
@@ -0,0 +1,319 @@
+---
+title: api.repositories
+description: クライアントサイドが使用するリポジトリ管理関連の API を提供する。
+---
+
+## bp
+リポジトリ管理関連の API を提供する Blueprint インスタンス。名前は `"repositories"` とする。
+URL プレフィックスは [`router:create_api_blueprint`](./01.router.md#create_api_blueprint) によって `/repositories` に設定される。
+
+#### シグネチャ
+```python[repositories.py]
+bp: Blueprint
+```
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+
+## get
+リポジトリの取得検索を取得するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[repositories.py]
+@bp.get("/", strict_slashes=False)
+@login_required
+@roles_required(USER_ROLES.SYSTEM_ADMIN, USER_ROLES.REPOSITORY_ADMIN)
+@validate(response_by_alias=True)
+def get(
+ query: RepositoriesQuery,
+) -> tuple[SearchResult, int] | tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/repositories
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | ------------------------------------------------------ | ------------------------------ |
+| query | [RepositoriesQuery](./11.schemas.md#repositoriesquery) | 検索条件を含むクエリパラメータ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------------------- | ------------------------------------------------------ |
+| tuple\[[SearchResult](../03.entities/07.search-request.md#searchresult), Literal[200]] | リポジトリ検索の結果を含むレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal[400]] | クエリパラメータのバリデーションエラーを含むレスポンス |
+
+#### 処理内容
+1. クエリパラメータをもとに [`services.repositories:search`](../05.services/03.repositories.md#search) を呼び出し、リポジトリの検索を行う。
+2. 戻り値をステータスコード 200 とともに返す。
+3. クエリパラメータの不正により検索に失敗した場合は、エラーレスポンスをステータスコード 400 とともに返す。
+
+
+## post
+リポジトリの作成するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[repositories.py]
+@bp.post("/", strict_slashes=False)
+@login_required
+@roles_required(USER_ROLES.SYSTEM_ADMIN)
+@validate(response_by_alias=True)
+def post(
+ body: RepositoryDetail,
+) -> tuple[RepositoryDetail, int, dict[str, str]] | tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**POST** /api/repositories
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | --------------------------------------------------------------------------- | ------------------------------------ |
+| body | [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | リポジトリ情報を含むリクエストボディ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
+| tuple\[[RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail), Literal[201], dict[str, str]] | 作成したリポジトリの情報を含むレスポンスと Location ヘッダを返す |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal[400]] | リクエストボディが不正な場合のエラーレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal[409]] | リポジトリが既に存在する場合のエラーレスポンス |
+
+#### 処理内容
+1. リクエストボディをもとに [`services.repositories:create`](../05.services/03.repositories.md#create) を呼び出し、リポジトリの作成を行う。
+2. 作成したリポジトリの情報を、ステータスコード 201 とともに返す。レスポンスの Location ヘッダには作成したリポジトリのエンドポイントを指定する。
+3. [`InvalidFormError`](../02.foundation/exc.md#invalidformerror) が送出された場合は、エラーレスポンスをステータスコード 400 とともに返す。
+4. [`ResourceInvalid`](../02.foundation/exc.md#resourceinvalid) が送出された場合は、エラーレスポンスをステータスコード 409 とともに返す。
+
+
+## id_get
+リポジトリの ID を指定してリポジトリの情報を取得するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[repositories.py]
+@bp.get("/")
+@validate(response_by_alias=True)
+@login_required
+@roles_required(USER_ROLES.SYSTEM_ADMIN, USER_ROLES.REPOSITORY_ADMIN)
+def id_get(repository_id: str) -> tuple[RepositoryDetail | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/repositories/\
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | --- | --------------- |
+| repository_id | str | リポジトリの ID |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
+| tuple\[[RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail), Literal\[200]] | 指定したリポジトリの情報を含むレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal\[403]] | アクセス権がない場合のエラーレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal\[404]] | 指定したリポジトリが存在しない場合のエラーレスポンス |
+
+#### 処理内容
+1. パスパラメータ `repository_id` をもとに [`services.repositories:get_by_id`](../05.services/03.repositories.md#get_by_id) を呼び出し、リポジトリの情報を取得する。
+2. リポジトリが取得されなければ、エラーレスポンスをステータスコード 404 とともに返す。
+3. アクセス権の有無を [`has_permission`](#has_permission) で評価し、権限がない場合はエラーレスポンスをステータスコード 403 とともに返す。
+4. 戻り値をステータスコード 200 とともに返す。
+
+
+## id_put
+リポジトリの ID を指定してリポジトリの情報を更新するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[repositories.py]
+@bp.put("/")
+@login_required
+@roles_required(USER_ROLES.SYSTEM_ADMIN, USER_ROLES.REPOSITORY_ADMIN)
+@validate(response_by_alias=True)
+def id_put(
+ repository_id: str, body: RepositoryDetail
+) -> tuple[RepositoryDetail | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**PUT** /api/repositories/\
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.put`{lang=python}: PUT リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | --------------------------------------------------------------------------- | ---------------------------------------------- |
+| repository_id | str | パスパラメータのリポジトリの ID |
+| body | [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 更新するリポジトリの情報を含むリクエストボディ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
+| tuple\[[RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail), Literal\[200]] | 更新したリポジトリの情報を含むレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal\[400]] | リクエストボディが不正な場合のエラーレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal\[404]] | 指定したリポジトリが存在しない場合のエラーレスポンス |
+
+#### 処理内容
+1. パスパラメータ `repository_id` とリクエストボディをもとに [`services.repositories:update`](../05.services/03.repositories.md#update) を呼び出し、リポジトリの情報を更新する。
+2. [`InvalidFormError`](../02.foundation/exc.md#invalidformerror) が送出された場合は、エラーレスポンスをステータスコード 400 とともに返す。
+3. [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) が送出された場合は、エラーレスポンスをステータスコード 404 とともに返す。
+4. 更新したリポジトリの情報を、ステータスコード 200 とともに返す。
+
+
+## id_delete
+リポジトリの ID を指定してリポジトリを削除するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[repositories.py]
+@bp.delete("/")
+@login_required
+@roles_required(USER_ROLES.SYSTEM_ADMIN)
+@validate(response_by_alias=True)
+def id_delete(
+ repository_id: str, query: RepositoryDeleteQuery
+) -> tuple[t.Literal[""], int] | tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**DELETE** /api/repositories/\
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.delete`{lang=python}: DELETE リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | -------------------------------------------------------------- | -------------------------------------- |
+| repository_id | str | パスパラメータのリポジトリの ID |
+| query | [RepositoryDeleteQuery](./11.schemas.md#repositorydeletequery) | 削除確認フレーズを含むクエリパラメータ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------- | ------------------------------------------------------ |
+| tuple\[Literal\[""], Literal[204]] | 空のレスポンスとステータスコード 204 を返す |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal[400]] | クエリパラメータのバリデーションエラーを含むレスポンス |
+| tuple\[[ErrorResponse](./11.schemas.md#errorresponse), Literal[404]] | 指定したリポジトリが存在しない場合のエラーレスポンス |
+
+#### 処理内容
+1. パスパラメータ `repository_id` とクエリパラメータをもとに [`services.repositories:delete`](../05.services/03.repositories.md#delete) を呼び出し、リポジトリの削除を行う。
+2. [`InvalidFormError`](../02.foundation/exc.md#invalidformerror) が送出された場合は、エラーレスポンスをステータスコード 400 とともに返す。
+3. [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) が送出された場合は、エラーレスポンスをステータスコード 404 とともに返す。
+4. 空のレスポンスとステータスコード 204 を返す。
+
+
+## has_permission
+リポジトリに対するアクセス権の有無を判定する。
+
+#### シグネチャ
+```python[repositories.py]
+def has_permission(repository_id: str) -> bool:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | --- | --------------- |
+| repository_id | str | リポジトリの ID |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---- | --------------------------------------------------------------- |
+| bool | リポジトリに対するアクセス権がある場合は True、ない場合は False |
+
+#### 処理内容
+1. ログインユーザーのロールが「システム管理者」の場合は、`True` を戻り値として返す。
+2. ログインユーザーのロールが「リポジトリ管理者」の場合は、管理対象のリポジトリ ID を
+ [`services.utils:get_permitted_repository_ids`](../05.services/09.utils.md#get_permitted_repository_ids) で取得し、
+ 引数 `repository_id` が管理対象のリポジトリ ID に含まれる場合は `True` を戻り値として返す。
+3. それ以外の場合は `False` を戻り値として返す。
+
+
+## filter_options
+リポジトリの検索オプション取得するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[repositories.py]
+@bp.get("/filter-options")
+@validate(response_many=True)
+def filter_options() -> list[FilterOption]:
+```
+
+#### エンドポイント
+**GET** /api/repositories/filter-options
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+ レスポンスはリストであるため、`response_many=True` を指定する。
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------------------------------------------ | -------------------------------------------------- |
+| list\[[FilterOption](../03.entities//07.search-request.md#filteroption)] | リポジトリの検索オプションのリストを含むレスポンス |
+
+#### 処理内容
+1. [`services.utils:search_repositories_options`](../05.services/09.utils.md#search_repositories_options) を呼び出し、レスポンスとして返す。
diff --git a/docs/content/01.detailed/04.api/06.groups.md b/docs/content/01.detailed/04.api/06.groups.md
new file mode 100644
index 00000000..8d9f39ac
--- /dev/null
+++ b/docs/content/01.detailed/04.api/06.groups.md
@@ -0,0 +1,405 @@
+---
+title: api.groups
+description: クライアントサイドが使用するグループ管理関連の API を提供する。
+---
+
+## bp
+グループ管理関連の API を提供する Blueprint インスタンス。
+名前は `"groups"` 、URL プレフィックスは [`router:create_api_blueprint`](./01.router.md#create_api_blueprint) によって `/groups` に設定される。
+
+#### シグネチャ
+```python[groups.py]
+bp: Blueprint
+```
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+
+## get
+リポジトリの取得検索を取得するエンドポイントを提供するコントローラ。
+
+#### シグネチャ
+```python[groups.py]
+@bp.get("/", strict_slashes=False)
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def get(query: GroupsQuery) -> tuple[GroupResult | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/groups
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | ------------------------------------------ | ------------------------------ |
+| query | [GroupsQuery](./11.schemas.md#groupsquery) | 検索条件を含むクエリパラメータ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
+| tuple\[[GroupResult](../03.entities/07.search-request.md#searchresult), Literal\[200]] | グループの検索結果を含むレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | ロールの権限を越える検索条件が指定された場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | 検索処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+
+1. リクエストコンテキストからログインユーザー情報を取得する。
+2. `build_group_search_criteria` を呼び出し、引数 `query` とログインユーザーのロールに基づいた `GroupSearchCriteria` オブジェクトを構築する。
+ 検索条件にロールの権限を越える条件が含まれている場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 403 とともに返す。
+3. `GroupSearchCriteria` オブジェクトをもとに、 `services.groups:search` を呼び出し、グループの検索結果を取得する。
+4. 検索処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+5. 検索結果を `GroupResult` オブジェクトに格納し、ステータスコード 200 とともに返す。
+
+
+## post
+グループの作成の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[groups.py]
+@bp.post("/", strict_slashes=False)
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def post(body: GroupDetail) -> tuple[GroupDetail, int, dict[str, str]] | tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**POST** /api/groups
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ----------- | ------------------------------------------ |
+| body | GroupDetail | 作成するグループ情報を含むリクエストボディ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ---------------------------------------------------------- |
+| tuple\[GroupDetail, Literal\[201], dict\[str, str]] | 作成されたグループ情報と Location ヘッダーを含むレスポンス |
+| tuple\[ErrorResponse,Literal\[400]] | リクエストの内容に不備がある場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[409]] | グループ ID がすでに存在する場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | グループ作成処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+
+1. リクエストコンテキストからログインユーザー情報を取得する。
+2. グループ ID がすでに存在するかを確認する。
+ 存在する場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 409 とともに返す。
+3. 引数 `body` をもとに、 `services.groups:create` を呼び出し、グループを作成する。
+4. グループ作成処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+5. 作成されたグループ情報を `GroupDetail` オブジェクトとして、ステータスコード 201 および `Location` ヘッダーとともに返す。
+ `Location` ヘッダーには作成されたグループの情報取得 API の絶対 URL を設定する。
+
+
+## id_get
+グループの情報取得の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[groups.py]
+@bp.get("/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def id_get(group_id: str) -> tuple[GroupDetail | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/groups/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| -------- | --- | ----------- |
+| group_id | str | グループ ID |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | -------------------------------------------------------- |
+| tuple\[GroupDetail, Literal\[200]] | グループ情報を含むレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | グループ情報へのアクセス権限がない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | グループが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | グループ情報の取得に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. リクエストコンテキストからログインユーザー情報を取得する。
+2. 引数 `group_id` をもとに、 `services.groups:get_by_id` を呼び出し、グループ情報を取得する。
+3. グループが存在しなかった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+4. 取得に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+5. 取得されたグループ情報とログインユーザーのロールに基づき、グループ情報へのアクセスできるかを確認する。
+ - システム管理者の場合、すべてのグループ情報にアクセスできる。
+ - リポジトリ管理者の場合、ログインユーザーが管理するリポジトリに所属するグループにのみアクセスできる。
+ 所属リポジトリがログインユーザーの管理するリポジトリに含まれていない場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 403 とともに返す。
+6. 取得したグループ情報を `GroupDetail` オブジェクトとして、ステータスコード 200 とともに返す。
+
+
+## id_put
+グループの更新の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[groups.py]
+@bp.put("/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def id_put(group_id: str, body: GroupDetail) -> tuple[GroupDetail | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**PUT** /api/groups/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.put`{lang=python}: PUT リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| -------- | ----------- | ------------------------------------------ |
+| group_id | str | グループ ID |
+| body | GroupDetail | 更新するグループ情報を含むリクエストボディ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | ------------------------------------------------------ |
+| tuple\[GroupDetail, Literal\[200]] | 更新されたグループ情報を含むレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | グループ情報を更新する権限がない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | グループが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[409]] | 更新内容に競合があった場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | グループ更新処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. `group_id` を引数に [`services.permmission:filter_permitted_group_ids`](../05.services/09.utils.md#filter_permitted_group_ids) を呼び出し、更新可能か確認する。
+ - 更新可能でなければ `ErrorResponse` オブジェクトを作成し、ステータスコード 403 とともに返す。
+3. 引数 `body`, をもとに、 `services.groups:update` を呼び出し、グループ情報を更新する。
+4. グループが存在しない場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+5. 更新内容に競合があった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 409 とともに返す。
+6. グループ更新処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+7. 更新されたグループ情報を `GroupDetail` オブジェクトとして、ステータスコード 200 とともに返す。
+
+## id_patche
+グループメンバーの追加 /除外機能を提供するコントローラー
+
+#### シグネチャ
+```python[groups.py]
+@bp.patch("/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def id_patche(group_id: str, body: GroupPatchRequest) -> tuple[GroupDetail | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**PATCH** /api/groups/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.delete`{lang=python}: DELETE リクエストを処理するエンドポイントを定義する。
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| -------- | --------------------------------------------------------- | ---------------------- |
+| group_id | str | グループ ID |
+| body | [`MemberPatchRequest`](./11.schemas.md#grouppatchrequest) | 追加 /除外するユーザー |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | ------------------------------------------------------ |
+| tuple\[GroupDetail, Literal\[200]] | 更新されたグループ情報を含むレスポンス |
+| tuple\[ErrorResponse, Literal\[400]] | 更新する内容に不備がある場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | グループ情報を更新する権限がない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | グループが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[409]] | 更新内容に競合があった場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | グループ更新処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. `group_id` を引数に [`services.permmission:filter_permitted_group_ids`](../05.services/09.utils.md#filter_permitted_group_ids) を呼び出し、更新可能か確認する。
+ - 更新可能でなければ `ErrorResponse` オブジェクトを作成し、ステータスコード 403 とともに返す。
+2. `body` の `path` がメンバーであれば操作タイプを確認し操作する値をリストにする。
+3. 引数 `group_id`,と先ほど作成したリストをもとに、 [`services.groups:update_member`](../05.services/04.groups.md#update_member) を呼び出し、グループ情報を更新する。
+4. グループが存在しない場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+5. 更新内容に競合があった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 409 とともに返す。
+6. グループ更新処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+7. 更新されたグループ情報を `GroupDetail` オブジェクトとして、ステータスコード 200 とともに返す。
+
+
+## id_delete
+単一グループの削除の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[groups.py]
+@bp.delete("/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def id_delete(group_id: str) -> tuple[ Literal[""] | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**DELETE** /api/groups/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.delete`{lang=python}: DELETE リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| -------- | --- | ------------------- |
+| group_id | str | 削除するグループ ID |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | ------------------------------------------------ |
+| tuple\[Literal\[""\], Literal\[204]] | 正常にグループが削除された場合のレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | グループの削除権限がない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | グループが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | グループ削除処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. `group_id` を引数に [`services.permmission:filter_permitted_group_ids`](../05.services/09.utils.md#filter_permitted_group_ids) を呼び出し、削除可能か確認する
+ - 削除可能でない場合、ステータスコード 403 とともに返す。
+ - 引数 `group_id` をもとに、 `services.groups:delete_by_id` を呼び出し、グループを削除する。
+2. グループが存在しなかった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+3. グループ削除処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+4. 正常にグループが削除された場合、空文字列とステータスコード 204 とともに返す。
+
+
+## delete_post
+複数グループの削除の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[groups.py]
+@bp.post("/delete")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def delete_post(list[str]) -> tuple[ Literal[""] | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**POST** /api/groups/delete
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ---------------------------------------------------------- | ---------------------------- |
+| body | [`DeleteGroupRequest`](./11.schemas.md#deletegrouprequest) | 削除するグループ ID のセット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | ------------------------------------------------ |
+| tuple\[Literal\[""\], Literal\[204]] | 正常にグループが削除された場合のレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | グループが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | グループ削除処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. リクエストボディから `group_ids` を取得する。
+2. `group_ids` を引数に [`services.permmission:filter_permitted_group_ids`](../05.services/09.utils.md#filter_permitted_group_ids) を呼び出し、削除可能か確認する。
+ - 戻り値を引数として [`services.groups:delete`](../05.services//04.groups.md#delete) を呼び出し、グループを削除する。
+3. グループが存在しなかった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+4. グループ削除処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+5. 正常にグループが削除された場合、空文字列とステータスコード 204 とともに返す。
+
+
+## filter_options
+フィルター選択肢の取得を提供するコントローラ。
+
+#### シグネチャ
+```python[groups.py]
+@bp.get("/filter-options")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def filter_options() -> FilterOption:
+```
+
+#### エンドポイント
+**GET** /api/groups/filter-options
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------ | ---------------- |
+| FilterOption | フィルター選択肢 |
+
+#### 処理内容
+1. current_user.is_member_of でis_member_of を取得
+2. [`service.groups:get_filter_options`](../05.services/04.groups.md#get_filter_options) でフィルターオプションを取得する。
+3. FilterOption を戻り値として返す。
diff --git a/docs/content/01.detailed/04.api/07.users.md b/docs/content/01.detailed/04.api/07.users.md
new file mode 100644
index 00000000..e4815b34
--- /dev/null
+++ b/docs/content/01.detailed/04.api/07.users.md
@@ -0,0 +1,304 @@
+---
+title: api.users
+description: クライアントサイドが使用するユーザー管理関連の API のコントローラ機能を提供する。
+---
+
+## bp
+ユーザー管理関連の API を提供する Blueprint インスタンス。
+名前は `"users"` 、URL プレフィックスは [`router:create_api_blueprint`](./01.router.md#create_api_blueprint) によって `/users` に設定される。
+
+#### シグネチャ
+```python[users.py]
+bp: Blueprint
+```
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+
+## get
+ユーザーの取得・検索の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[users.py]
+@bp.get("/", strict_slashes=False)
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def get(query: UsersQuery) -> tuple[UsersResult | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/users
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | ---------- | -------------------------------------- |
+| query | UsersQuery | ユーザー検索条件を含むクエリパラメータ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | -------------------------------------------------------------- |
+| tuple\[UsersResult, Literal\[200]] | ユーザーの検索結果を含むレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | ロールの権限を越える検索条件が指定された場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | 検索処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+
+1. リクエストコンテキストからログインユーザー情報を取得する。
+2. `build_user_search_criteria` を呼び出し、引数 `query` とログインユーザーのロールに基づいた `UserSearchCriteria` オブジェクトを構築する。
+ 検索条件にロールの権限を越える条件が含まれている場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 403 とともに返す。
+3. `UserSearchCriteria` オブジェクトをもとに、 `services.users:search` を呼び出し、ユーザーの検索結果を取得する。
+4. 検索処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+5. 検索結果を `UsersResult` オブジェクトに格納し、ステータスコード 200 とともに返す。
+
+
+## post
+ユーザーの作成の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[users.py]
+@bp.post("/", strict_slashes=False)
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def post(body: UserDetail) -> tuple[UserDetail, int, dict[str, str]] | tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**POST** /api/users
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ---------- | ------------------------------------------ |
+| body | UserDetail | 作成するユーザー情報を含むリクエストボディ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------- | -------------------------------------------------------------- |
+| tuple\[UserDetail, Literal\[201], dict\[str, str]] | 作成されたユーザー情報と Location ヘッダーを含むレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | ユーザー作成権限がない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[409]] | ユーザー ID または ePPN がすでに存在する場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | ユーザー作成処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+
+1. リクエストコンテキストからログインユーザー情報を取得する。
+2. ユーザー ID 、ePPN がすでに存在するかを確認する。
+ 存在する場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 409 とともに返す。
+3. ログインユーザーのロールをもとに、ユーザーを作成できるかを確認する。
+ - システム管理者の場合、すべてのユーザーを作成できる。
+ - リポジトリ管理者の場合、ログインユーザーが管理するリポジトリに所属するユーザーのみ作成できる。
+ すべての所属リポジトリがログインユーザーが管理するリポジトリに含まれていなければ、ステータスコード 403 とともに返す。
+4. 引数 `body` をもとに、 `services.users:create` を呼び出し、ユーザーを作成する。
+5. ユーザー作成処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+6. 作成されたユーザー情報を `UserDetail` オブジェクトとして、ステータスコード 201 および `Location` ヘッダーとともに返す。
+ `Location` ヘッダーには作成されたユーザーの情報取得 API の絶対 URL を設定する。
+
+
+## id_get
+ユーザーの情報取得の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[users.py]
+@bp.get("/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def id_get(user_id: str) -> tuple[UserDetail | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/users/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------- | --- | ----------- |
+| user_id | str | ユーザー ID |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | -------------------------------------------------------- |
+| tuple\[UserDetail, Literal\[200]] | ユーザー情報を含むレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | ユーザー情報へのアクセス権限がない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | ユーザーが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | ユーザー情報の取得に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. リクエストコンテキストからログインユーザー情報を取得する。
+2. 引数 `user_id` をもとに、 `services.users:get_by_id` を呼び出し、ユーザー情報を取得する。
+3. ユーザーが存在しなかった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+4. 取得に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+5. 取得されたユーザー情報とログインユーザーのロールに基づき、ユーザー情報へのアクセスできるかを確認する。
+ - システム管理者の場合、すべてのユーザー情報にアクセスできる。
+ - リポジトリ管理者の場合、ログインユーザーが管理するリポジトリに所属するユーザーにのみアクセスできる。
+ 所属リポジトリがログインユーザーの管理するリポジトリに含まれていない場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 403 とともに返す。
+6. 取得したユーザー情報を `UserDetail` オブジェクトとして、ステータスコード 200 とともに返す。
+
+
+## id_put
+ユーザーの更新の機能を提供するコントローラ。
+
+#### シグネチャ
+```python[users.py]
+@bp.put("/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def id_put(user_id: str, body: UserDetail) -> tuple[UserDetail | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**PUT** /api/users/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+
+#### デコレータ
+- `@bp.put`{lang=python}: PUT リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------- | ---------- | ------------------------------------------ |
+| user_id | str | ユーザー ID |
+| body | UserDetail | 更新するユーザー情報を含むリクエストボディ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | ------------------------------------------------------ |
+| tuple\[UserDetail, Literal\[200]] | 更新されたユーザー情報を含むレスポンス |
+| tuple\[ErrorResponse, Literal\[403]] | ユーザー情報を更新する権限がない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | ユーザーが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[409]] | 更新内容に競合があった場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | ユーザー更新処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. リクエストコンテキストからログインユーザー情報を取得する。
+2. 引数 `body` とログインユーザーのロールをもとに、ユーザーを更新できるかを確認する。
+ - システム管理者の場合、すべてのユーザーを更新できる。
+ - リポジトリ管理者の場合、ログインユーザーが管理するリポジトリに所属するユーザーのみ更新できる。
+ すべての所属リポジトリがログインユーザーの管理するリポジトリに含まれていない場合、ステータスコード 403 とともに返す。
+3. 引数 `body` をもとに、 `services.users:update` を呼び出し、ユーザー情報を更新する。
+4. ユーザーが存在しない場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+5. 更新内容に競合があった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 409 とともに返す。
+6. ユーザー更新処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+7. 更新されたユーザー情報を `UserDetail` オブジェクトとして、ステータスコード 200 とともに返す。
+
+
+## ~~id_delete~~
+ユーザーの削除の機能を提供するコントローラ。実装予定なし。
+
+#### シグネチャ
+```python[users.py]
+@bp.delete("/")
+@login_required
+@roles_required("system_admin")
+@validate()
+def id_delete(user_id: str) -> tuple[ Literal[""] | ErrorResponse, int]:
+```
+
+#### エンドポイント
+**DELETE** /api/users/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.delete`{lang=python}: DELETE リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------- | --- | ----------- |
+| user_id | str | ユーザー ID |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------ | ------------------------------------------------ |
+| tuple\[Literal\[""\], Literal\[204]] | 正常にユーザーが削除された場合のレスポンス |
+| tuple\[ErrorResponse, Literal\[404]] | ユーザーが存在しない場合のエラーレスポンス |
+| tuple\[ErrorResponse, Literal\[500]] | ユーザー削除処理に失敗した場合のエラーレスポンス |
+
+#### 処理内容
+1. 引数 `user_id` をもとに、 `services.users:delete` を呼び出し、ユーザーを削除する。
+2. ユーザーが存在しなかった場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 404 とともに返す。
+3. ユーザー削除処理に失敗した場合、 `ErrorResponse` オブジェクトを作成し、ステータスコード 500 とともに返す。
+4. 正常にユーザーが削除された場合、空文字列とステータスコード 204 とともに返す。
+
+## filter_options
+フィルター選択肢の取得を提供するコントローラ。
+
+#### シグネチャ
+```python[users.py]
+@bp.get("/filter-options")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def filter_options() -> FilterOption:
+```
+
+#### エンドポイント
+**GET** /api/users/filter-options
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------ | ------------------------------ |
+| FilterOption | ユーザーのフィルターオプション |
+
+#### 処理内容
+1. current_user.is_member_of でis_member_of を取得
+2. [`service.users:get_filter_options`](../05.services/05.users.md#get_filter_options) でフィルターオプションを取得
+3. FilterOption を返却する
diff --git a/docs/content/01.detailed/04.api/09.bulk.md b/docs/content/01.detailed/04.api/09.bulk.md
new file mode 100644
index 00000000..e5c401cf
--- /dev/null
+++ b/docs/content/01.detailed/04.api/09.bulk.md
@@ -0,0 +1,322 @@
+---
+title: api.bulk
+description: クライアントサイドが使用するユーザー一括操作関連の API を提供する。
+---
+
+## bp
+グループ管理関連の API を提供する Blueprint インスタンス。
+名前は `"bulk"` 、URL プレフィックスは [`router:create_api_blueprint`](./01.router.md#create_api_blueprint) によって `"/api/bulk"` に設定される。
+
+#### シグネチャ
+```python[bulk.py]
+bp: Blueprint
+```
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+
+## upload_file
+一括操作するファイルをサーバーにアップロードしバリデーションタスクを開始するエンドポイント
+
+#### シグネチャ
+```python[bulk.py]
+@bp.post("/upload-file")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+@with_files
+def upload_file(from:str, files: FileStorage) -> tuple[BulkBody, int] | tuple[ErrorResponse, int]::
+```
+
+#### エンドポイント
+**POST** /api/bulk/upload_file
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+- `@with_files`{lang=python}: `multipart/form-data` からファイルを取得、検証し、データクラスにパッケージ化して関数の引数に注入するデコレータ。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ----- | ----------------------------------------------------------- | -------------------------- |
+| from | [`TargetRepositoryForm`](./11.schemas.md#targetrepositoryform) | 選択されたリポジトリ ID |
+| files | [`BulkFileForm`](./11.schemas.md#bulkfileform) | アップロードされたファイル |
+
+#### 戻り値
+| 型 | 説明 |
+| ----------------------------------- | ------------------------------------------ |
+| tuple\[BulkBody,Literal\[200]] | タスク ID とファイルの識別子 |
+| tuple\[ErrorResponse,Literal\[400]] | ファイルに不備がある場合のエラーレスポンス |
+
+#### 処理内容
+1. UUIDv7 でtemporary_id を作成しファイル名に付加
+2. ファイルを仮アップロード用のディレクトリに保存
+3. files テーブルに id=temporary_id, file_path, file_content を保存
+4. [`services.bulk:delete_temporary_file`](../05.services/06.bulk.md#delete_temporary_file) をcelery のcountdown で呼び出す countdown の秒数はサーバー設定値とする
+5. [`services.bulk:validate_upload_data`](../05.services/06.bulk.md#validate_upload_data) を呼び出しファイルのバリデーションを行う celery のタスクを実行する
+6. タスク ID とtemporary_id をBulkBody に入れ返却
+
+## validate_status
+バリデーションタスクの実行状況の取得エンドポイント
+
+#### シグネチャ
+```python[bulk.py]
+@bp.get("/validate/status/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def validate_status(task_id: str) -> tuple[BulkBody, int] |tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/bulk/validate/status/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------- | --- | --------- |
+| task_id | str | タスク ID |
+
+#### 戻り値
+| 型 | 説明 |
+| ----------------------------------- | -------------------------------- |
+| tuple\[BulkBody,Literal\[200]] | タスクの status |
+| tuple\[ErrorResponse,Literal\[404]] | task_id のタスクが存在しない場合 |
+| tuple\[ErrorResponse,Literal\[500]] | Redis,DB の接続に失敗した場合 |
+
+#### 処理内容
+1. task_id をもとにタスクの status を取得
+2. status 取得時に redis.ConnectionError が発生した場合 ErrorResponse とともに 500 を返却
+3. status が取得できなければ ErrorResponse とともに 404 を返却
+4. status を取得できれば status をBulkBody に入れて返却
+
+## validate_result
+一括操作データの検証結果を取得するエンドポイント
+
+#### シグネチャ
+```python[bulk.py]
+@bp.get("/validate/result/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def validate_result(task_id: str) -> tuple[ValidateSummary, int] | tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/bulk/validate/result/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------- | --- | --------- |
+| task_id | str | タスク ID |
+
+#### 戻り値
+| 型 | 説明 |
+| -------------------------------------- | -------------------------------- |
+| tuple\[ValidateSummary, Literal\[200]] | データの検証結果 |
+| tuple\[ErrorResponse, Literal\[404]] | task_id のタスクが存在しない場合 |
+| tuple\[ErrorResponse, Literal\[500]] | Redis,DB の接続に失敗した場合 |
+
+#### 処理内容
+1. task_id をもとにタスクの実行結果から履歴 ID を取得する
+2. 履歴 ID を引数に [`services.bulk:get_validate_result`](../05.services/06.bulk.md#get_validate_result) で検証結果を取得する
+3. task_id のタスクが存在しない場合 404 とともに ErrorResponse を返却
+4. Redis,DB の接続に失敗した場合 500 とともに ErrorResponse を返却
+5. ValidateSummary を返却する
+
+## missing_user_get
+リポジトリに属するがファイルに含まれていないユーザーを取得するエンドポイント
+
+#### シグネチャ
+```python[bulk.py]
+@bp.get("/missing-user/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def missing_user_get(task_id: str) -> tuple[UsersResult, int] | tuple[ErrorResponse, int]:
+```
+
+#### エンドポイント
+**GET** /api/bulk/missing-user/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.get`{lang=python}: GET リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------- | --- | --------- |
+| task_id | str | タスク ID |
+
+#### 戻り値
+| 型 | 説明 |
+| ----------------------------------- | -------------------------------------- |
+| tuple\[UsersResult,Litaral\[200]] | ファイルに含まれていないユーザーデータ |
+| tuple\[ErrorResponse,Literal\[404]] | task_id のタスクが存在しない場合 |
+| tuple\[ErrorResponse,Literal\[500]] | Redis,DB の接続に失敗した場合 |
+
+#### 処理内容
+1. task_id をもとにタスクの実行結果から履歴 ID を取得する
+2. 取得時に redis.ConnectionError が発生した場合 ErrorResponse とともに 500 を返却
+3. task_id のタスクが存在しない場合 404 とともに ErrorResponse を返却
+4. list\[UserDetail] をUsersResult に入れ返却
+
+## execute
+一括操作タスクの実行をおこなうエンドポイント
+
+#### シグネチャ
+```python[bulk.py]
+@bp.post("/execute/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def execute(body: UploadBody) -> tuple[BulkBody, int]:
+```
+
+#### エンドポイント
+**POST** /api/bulk/execute/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ---- | ------------------------------------- | -------------------------------- |
+| body | [UploadBody](./11.schemas.md#uploadbody) | 一括操作タスクのリクエストボディ |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------------------------ | --------- |
+| tuple\[BulkBody,Literal\[200]] | タスク ID |
+
+#### 処理内容
+1. [`service.bulk:update_users`](../05.services/06.bulk.md#update_users) をcelery のタスクで実行する
+2. task_id をBulkBody に入れて返却
+
+## execute_status
+一括操作タスクの実行状況の取得エンドポイント
+
+#### シグネチャ
+```python[bulk.py]
+@bp.post("/upload-file/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate()
+def execute_status(task_id: str) -> tuple[BulkBody, int] | tuple[ErrorResponse, int]
+```
+#### エンドポイント
+**GET** /api/bulk/execute/status/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------- | --- | --------- |
+| task_id | str | タスク ID |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------------------------------ | -------------------------------- |
+| tuple\[BulkBody, Literal\[200]] | タスクの status |
+| tuple\[ErrorResponse, Literal\[404]] | task_id のタスクが存在しない場合 |
+| tuple\[ErrorResponse, Literal\[500]] | Redis 接続に失敗した場合 |
+
+#### 処理内容
+1. task_id をもとにタスクの status を取得
+2. status 取得時に redis.ConnectionError が発生した場合 ErrorResponse とともに 500 を返却
+3. task_id のタスクが存在しない場合 404 とともに ErrorResponse を返却
+4. status を取得できれば status をBulkBody に入れて返却
+
+## result
+一括操作情報を取得するエンドポイント
+
+#### シグネチャ
+```python[bulk.py]
+@bp.post("/result/")
+@login_required
+@roles_required("system_admin", "repository_admin")
+@validate(response_by_alias=True)
+def result(history_id: uuid.UUID,query:UploadQuery) -> tuple[ResultSummary, int]:
+```
+
+#### エンドポイント
+**GET** /api/bulk/result/
+
+#### 依存するライブラリ
+- **Flask**: Blueprint を使用する。
+- **Flask-Login**: クライアントのセッション管理に使用する。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### デコレータ
+- `@bp.post`{lang=python}: POST リクエストを処理するエンドポイントを定義する。
+- `@login_required`{lang=python}: ログインを要求する。
+- `@roles_required`{lang=python}: ログインユーザーに「システム管理者」または「リポジトリ管理者」のロールを要求する。
+- `@validate`{lang=python}: モデルクラスを使用してリクエストとレスポンスのバリデーションを行う。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ---------- | --------------------------------------------------- | --------------------- |
+| history_id | uuid.UUID | アップロード履歴の id |
+| query | [`UploadQuery`](./11.schemas.md#uploadquery) | フィルター項目 |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------------------------------ | ------------------ |
+| tuple\[ResultSummary, Literal\[200]] | 一括操作結果データ |
+
+#### 処理内容
+1. query をもとにフィルターを文字列のリストに変換,ページサイズ,オフセットを取り出す
+2. [`services.bulk:get_upload_result`](../05.services/06.bulk.md#get_upload_result) でデータを取得する
+3. 例外が発生した場合 ErrorResponse を返却
diff --git a/docs/content/01.detailed/04.api/10.helper.md b/docs/content/01.detailed/04.api/10.helper.md
new file mode 100644
index 00000000..844df907
--- /dev/null
+++ b/docs/content/01.detailed/04.api/10.helper.md
@@ -0,0 +1,27 @@
+---
+title: api.helper
+description: コントローラー層で使用するデコレータを定義する
+---
+
+## roles_required
+ユーザーが権限を持っているか検証するデコレータ
+
+#### シグネチャ
+```python[helper.py]
+def roles_required(*roles: str) -> Callable[[Callable[P, R]], Callable[P, R]]:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------ | --- | -------------------------------------- |
+| *roles | str | アクセスを許可するロール (可変長引数 ) |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------- | ---------------------------------- |
+| Literal\[403] | ユーザーに要求された権限がない場合 |
+
+#### 処理内容
+1. current_user.is_member_of を引数に [`services.utils:extract_group_ids`](../05.services/09.utils.md#extract_group_ids) でグループ ID を取得する。
+2. `services.utils.affiliations:detect_affiliations`を呼び出しロールを取得する。
+3. 引数が含まれていなければ 403 を返す。
diff --git a/docs/content/01.detailed/04.api/11.schemas.md b/docs/content/01.detailed/04.api/11.schemas.md
new file mode 100644
index 00000000..89630958
--- /dev/null
+++ b/docs/content/01.detailed/04.api/11.schemas.md
@@ -0,0 +1,509 @@
+---
+title: api.schemas
+description: API のリクエストおよびレスポンスで使用されるスキーマモデルを提供する。
+---
+
+## LoginUserState
+ログインユーザーの状態を表すモデルクラス。
+レスポンスボディの Python オブジェクトから JSON へのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[callback.py]
+class LoginUserState(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| --------------- | ------------------- | ---------------------------------------- |
+| id | str | ユーザー ID |
+| eppn | str | ユーザーの ePPN (EduPersonPrincipalName) |
+| user_name | str | ユーザー名 |
+| is_system_admin | bool | システム管理者であるかどうかを示すフラグ |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性はログインユーザーの状態を表す JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
+
+## OAuthTokenQuery
+OAuth 2.0 の認可コードを含むクエリパラメータを受け取るためのモデルクラス。
+クエリパラメータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+#### シグネチャ
+```python[callback.py]
+class OAuthTokenQuery(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------- |
+| code | str | 認可コード |
+| state | str | 状態パラメータ |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+
+## ErrorResponse
+API でエラーが発生した際のエラー情報を表すモデルクラス。
+レスポンスボディの Python オブジェクトから JSON へのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[callback.py]
+class ErrorResponse(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------- | --- | ---------------- |
+| code | str | メッセージコード |
+| message | str | エラーメッセージ |
+
+#### クラスメソッド
+
+| 名前 | 型 | 説明 |
+| ---------- | ---- | -------------------------------------------- |
+| preprocess | dict | インスタンス化時に前処理を行うクラスメソッド |
+
+### preprocess
+クラスのインスタンス化時にコンストラクタの引数に対して前処理を行うクラスメソッド。
+
+#### シグネチャ
+```python[callback.py]
+@model_validator(mode="before")
+@classmethod
+def preprocess(cls, values: dict) -> dict:
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### デコレータ
+- `@model_validator(mode="before")`{lang=python}: モデルのインスタンス化前に割り込んで関数を実行するための Pydantic デコレータ。
+- `@classmethod`{lang=python}: クラスメソッドを定義するためのデコレータ。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | ---- | ---------------------------------- |
+| data | dict | コンストラクタに渡された引数の辞書 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---- | ---------------------- |
+| dict | 前処理された引数の辞書 |
+
+#### 処理内容
+1. 引数 `data` からキーに `message` を持つ要素を取り出し、そのクラスが [`LogMessage`](../02.foundation/messages.md#logmessage) のインスタンスであれば、以下の処理を行う。
+ - `code` キーに `message` の `code` 属性の値を設定する。ただし、 `code` キーがすでに存在する場合は上書きしない。
+ - `message` キーの値を `data` 属性の値に置き換える。
+2. 前処理された引数の辞書を戻り値として返す。
+
+
+## GlobalSearchQuery
+横断検索リクエストのクエリパラメータを受け取るためのモデルクラス。
+クエリパラメータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+#### シグネチャ
+```python[search.py]
+class GlobalSearchQuery(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---- | --- | ------------------ |
+| q | str | 検索キーワード |
+| l | int | 1 ページの表示件数 |
+
+
+## GlobalSearchResult
+横断検索のレスポンスボディを表すモデルクラス。
+レスポンスボディの Python オブジェクトから JSON へのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[search.py]
+class GlobalSearchResult(RootModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.RootModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---- | ----------------------------------------------------------------------- | ---------------- |
+| root | list\[[SearchResult](../03.entities/07.search-request.md#searchresult)] | 検索結果のリスト |
+
+#### 注釈
+- `root` 属性は横断検索のレスポンスボディの配列そのものに対応している。
+
+
+## RepositoriesQuery
+リポジトリ検索リクエストのクエリパラメータを受け取るためのモデルクラス。
+クエリパラメータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---- | ----------------------- | --------------------------- |
+| q | str | 検索キーワード |
+| i | list\[str] | フィルターするリポジトリ ID |
+| k | str | ソートキー |
+| d | Literal\["asc", "desc"] | 並び順 |
+| p | int | ページ番号 |
+| l | int | 1 ページの表示件数 |
+
+
+## GroupsQuery
+グループ検索リクエストのクエリパラメータを受け取るためのモデルクラス。
+クエリパラメータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---- | ----------------------- | --------------------------- |
+| q | str | 検索キーワード |
+| r | list\[str] | フィルターするリポジトリ ID |
+| i | list\[str] | フィルターするグループ ID |
+| u | list\[str] | フィルターするユーザー ID |
+| s | Literal\[0,1] | 公開,非公開 |
+| v | Literal\[0,1,2] | メンバー公開設定 |
+| k | str | ソートキー |
+| d | Literal\["asc", "desc"] | 並び順 |
+| p | int | ページ番号 |
+| l | int | 1 ページの表示件数 |
+
+#### 備考
+クラス属性 `s` の各値は以下の通りに対応する
+| 値 | 説明 |
+| --- | ------- |
+| 0 | public |
+| 1 | private |
+
+クラス属性 `v` の各値は以下の通りに対応する
+| 値 | 説明 |
+| --- | ------- |
+| 0 | public |
+| 1 | private |
+| 2 | hidden |
+
+
+## UsersQuery
+ユーザー検索リクエストのクエリパラメータを受け取るためのモデルクラス。
+クエリパラメータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---- | -------------------------- | --------------------------- |
+| q | str | 検索キーワード |
+| r | list\[str] | フィルターするリポジトリ ID |
+| g | list\[str] | フィルターするグループ ID |
+| i | list\[str] | フィルターするユーザー ID |
+| a | list\[Literal\[0,1,2,3,4]] | フィルターするロール |
+| s | date | 最終更新日時範囲の開始日 |
+| e | date | 最終更新日時範囲の終了日 |
+| k | str | ソートキー |
+| d | Literal\["asc", "desc"] | 並び順 |
+| p | int | ページ番号 |
+| l | int | 1 ページの表示件数 |
+
+#### 備考
+クラス属性 `a` の各値は以下の通りに対応する
+| 値 | 説明 |
+| --- | ------------------------ |
+| 0 | System Administrator |
+| 1 | Repository Administrator |
+| 2 | Community Administrator |
+| 3 | Contributor |
+| 4 | General User |
+
+
+## RepositoryDeleteQuery
+リポジトリ削除リクエストのクエリパラメータを受け取るためのモデルクラス。
+クエリパラメータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------------ | --- | ---------------------- |
+| confirmation | str | 削除確認のための文字列 |
+
+
+## GroupPatchRequest
+グループ情報の部分更新のリクエストボディを表すモデルクラス。
+リクエストボディの Python オブジェクトから JSON へのシリアライズ機能を提供する。
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---------- | -------------------------------------------------- | ------------------------------ |
+| operations | list\[[GroupPatchOperation](#grouppatchoperation)] | グループ情報の更新操作のリスト |
+
+
+## GroupPatchOperation
+グループ情報の更新操作を表すモデルクラス。 [GroupPatchRequest](#grouppatchrequest) でネストした属性として使用される。
+現時点ではメンバーの追加・除外の操作のみを想定している。
+
+#### シグネチャ
+```python[groups.py]
+class GroupPatchOperation(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ----- | ------------------------ | -------------------- |
+| op | Literal\["add","remove"] | 操作タイプ名 |
+| path | str | 操作対象のフィールド |
+| value | list\[str] | 操作で使用する値 |
+
+
+## DeleteGroupRequest
+複数グループ削除のリクエストボディを表すモデルクラス。
+リクエストボディの JSON から Python オブジェクトへのデシリアライズ機能を提供する。
+
+#### 依存するライブラリ
+- **Pydantic**: モデルクラスを定義するために使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| --------- | --------- | ---------------------------- |
+| group_ids | set\[str] | 削除するグループ ID のセット |
+
+##### 注釈
+- `group_ids` 属性はリクエストボディの JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
+
+
+## HistoryPublic
+履歴の公開設定の更新のリクエストのレスポンスボディを表すモデルクラス。
+レスポンスボディの Python オブジェクトから JSON へのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[history.py]
+class HistoryPublic(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ------ | ---- | -------------- |
+| public | bool | 履歴の公開設定 |
+
+
+## OperatorQuery
+履歴一覧で使用できる実行ユーザーによるフィルターの選択肢を取得するリクエストのクエリパラメータを受け取るためのモデルクラス。
+クエリパラメータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---- | --- | ------------------ |
+| q | str | 検索キーワード |
+| p | int | ページ番号 |
+| l | int | 1 ページの表示件数 |
+
+
+## TargetRepositoryForm
+一括操作機能でファイルアップロード時にリポジトリを指定するフォームを表すモデルクラス。
+リクエストボディの フォームデータを型安全に扱うために、 Flask-Pydantic の `@validate`{lang=python} デコレータと組み合わせて使用される。
+
+#### シグネチャ
+```python[bulk.py]
+class TargetRepositoryForm(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### 継承元
+- `pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------- | ------------------- | --------------------- |
+| repository_id | str | 操作するリポジトリ ID |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- `repository_id` 属性はフォームのフィールド名と Python オブジェクトの属性名の間で、camelCase ⇔ snake_case で対応している。
+
+
+## BulkFileForm
+`multipart/form-data` でアップロードされたファイル群を格納し、 View 関数内で型安全に扱うためのデータクラス。
+
+#### シグネチャ
+```python[bulk.py]
+class BulkFileForm(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+- **Werkzeug**: ファイルのインスタンスを操作するために使用。
+
+#### 継承元
+- `pydantic.BaseModel`
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ----------------------------------- | --------------------- |
+| bulk_file | werkzeug.datastructures.FileStorage | アップロードファイル |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 備考
+外部ライブラリ `Werkzeug` の型を使用するため、`model_config` に `arbitrary_types_allowed=True`を設定する必要がある。
+
+## BulkBody
+一括操作のタスクの状態を表すモデルクラス。
+レスポンスボディの Python オブジェクトから JSON へのシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[bulk.py]
+class BulkBody(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用する。
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------ | ------------------- | --------------------------------- |
+| temp_file_id | uuid.UUID | 仮アップロードされたファイルの ID |
+| history_id | uuid.UUID | 履歴 ID |
+| task_id | str | タスク ID |
+| status | str | タスクステータス |
+| model_config | pydantic.ConfigDict | Pydantic モデルの設定 |
+
+#### 注釈
+- すべての属性はリクエストボディの JSON と Python オブジェクト間で camelCase ⇔ snake_case で対応している。
+
+
+## ExcuteRequest
+一括操作の実行リクエストのリクエストボディを表すモデルクラス。
+リクエストボディの JSON から Python オブジェクトへのデシリアライズ機能を提供する。
+
+#### シグネチャ
+```python[bulk.py]
+class ExcuteRequest(BaseModel):
+```
+
+#### 依存するライブラリ
+- **Pydantic**: モデル定義および JSON シリアライズ・デシリアライズに使用。
+
+#### クラス属性
+| 名前 | 型 | 説明 |
+| ------------- | ---------------------------------------------------------------- | ------------------------------------------------ |
+| temp_file_id | str | 仮アップロードされたファイルの ID |
+| repository_id | str | 選択されたリポジトリの ID |
+| temporary_id | uuid.UUID | 仮アップロードされたファイルの識別子 |
+| delete_users | list\[[UserDetail](../03.entities/13.user-detail.md#userdetail)] | リポジトリ内のグループから除外するユーザーの情報 |
+
+
+## UploadQuery
+アップロード結果の検索クエリを表すモデルクラス。
+
+#### 依存するライブラリ
+- **Pydantic**: モデルクラスを定義するために使用する。
+
+#### 継承元
+`pydantic.BaseModel`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ---- | ---------- | ------------------ |
+| f | list\[int] | 絞り込むステータス |
+| p | int | ページ番号 |
+| l | int | 1 ページの表示件数 |
+
+#### 備考
+クラス属性 `f` の各値は以下の通りに対応する
+| 値 | 説明 |
+| --- | ------- |
+| 0 | success |
+| 1 | update |
+| 2 | delete |
+| 3 | skip |
+| 4 | error |
diff --git a/docs/content/01.detailed/05.services/.navigation.yml b/docs/content/01.detailed/05.services/.navigation.yml
new file mode 100644
index 00000000..c6b22b52
--- /dev/null
+++ b/docs/content/01.detailed/05.services/.navigation.yml
@@ -0,0 +1 @@
+title: サービス
diff --git a/docs/content/01.detailed/05.services/01.service_settings.md b/docs/content/01.detailed/05.services/01.service_settings.md
new file mode 100644
index 00000000..fa918c8e
--- /dev/null
+++ b/docs/content/01.detailed/05.services/01.service_settings.md
@@ -0,0 +1,117 @@
+---
+title: service_settings
+description: 当システムの動的なサービス設定情報の保存および取得を行う機能を提供する。
+---
+
+## get_client_credentials
+データベースから当システムに紐づく SP のクライアント認証情報を取得する機能を提供する。
+
+#### シグネチャ
+```python[service_settings.py]
+def get_client_credentials() -> ClientCredentials | None:
+```
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------------------------------------------ | ---------------------------------------------------- |
+| [ClientCredentials](../03.entities/01.auth.md#clientcredentials) \| None | クライアント認証情報。存在しない場合は None を返す。 |
+
+#### エラー
+
+| 型 | 説明 |
+| ------------------------------------------------------------ | ---------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | 取得された設定からクライアント認証情報を読み取れない場合。 |
+
+#### 処理内容
+1. データベースからサービス設定情報を `"client_credentials"` キーで取得する。
+2. レコードが存在しない場合は `None`{lang=python} を戻り値として返す。
+3. データベース操作中に予期しないエラーが発生した場合は [`DatabaseError`](../02.foundation/exc.md#databaseerror) を送出する。
+4. 取得した設定情報を [`ClientCredentials`](../03.entities/01.auth.md#clientcredentials) モデルにデシリアライズして戻り値として返す。
+5. デシリアライズに失敗した場合は [`CredentialsError`](../02.foundation/exc.md#credentialserror) を送出する。
+
+
+## save_client_credentials
+当システムに紐づく SP のクライアント認証情報をデータベースに保存する機能を提供する。
+
+#### シグネチャ
+```python[service_settings.py]
+def save_client_credentials(credentials: ClientCredentials) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----------- | ---------------------------------------------------------------- | -------------------- |
+| credentials | [ClientCredentials](../03.entities/01.auth.md#clientcredentials) | クライアント認証情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ------------------------------------------------------------ | -------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報のシリアライズに失敗した場合。 |
+
+#### 処理内容
+1. 引数 `credentials` を JSON データにシリアライズする。
+2. シリアライズに失敗した場合は [`CredentialsError`](../02.foundation/exc.md#credentialserror) を送出する。
+3. データベースにサービス設定情報を `"client_credentials"` キーで保存する。
+4. データベース操作中に予期しないエラーが発生した場合は [`DatabaseError`](../02.foundation/exc.md#databaseerror) を送出する。
+
+
+## get_oauth_token
+データベースから当システムに紐づく SP のアクセストークン情報を取得する機能を提供する。
+
+#### シグネチャ
+```python[service_settings.py]
+def get_oauth_token() -> OAuthToken | None:
+```
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---------------------------------------------------------- | ---------------------------------------------------- |
+| [OAuthToken](../03.entities/01.auth.md#oauthtoken) \| None | アクセストークン情報。存在しない場合は None を返す。 |
+
+#### エラー
+
+| 型 | 説明 |
+| ---------------------------------------------------------- | ---------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | 取得された設定からアクセストークン情報を読み取れない場合。 |
+
+#### 処理内容
+1. データベースからサービス設定情報を `"oauth_token"` キーで取得する。
+2. レコードが存在しない場合は `None` を戻り値として返す。
+3. データベース操作中に予期しないエラーが発生した場合は [`DatabaseError`](../02.foundation/exc.md#databaseerror) を送出する。
+4. 取得した設定情報を [`OAuthToken`](../03.entities/01.auth.md#oauthtoken) モデルにデシリアライズして戻り値として返す。
+5. デシリアライズに失敗した場合は [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+
+
+## save_oauth_token
+当システムに紐づく SP のアクセストークン情報をデータベースに保存する機能を提供する。
+
+#### シグネチャ
+```python[service_settings.py]
+def save_oauth_token(token: OAuthToken) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | -------------------------------------------------- | -------------------- |
+| token | [OAuthToken](../03.entities/01.auth.md#oauthtoken) | アクセストークン情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ---------------------------------------------------------- | -------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークン情報のシリアライズに失敗した場合。 |
+
+#### 処理内容
+1. 引数 `token` を JSON データにシリアライズする。
+2. シリアライズに失敗した場合は [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+3. データベースにサービス設定情報を `"oauth_token"` キーで保存する。
+4. データベース操作中に予期しないエラーが発生した場合は [`DatabaseError`](../02.foundation/exc.md#databaseerror) を送出する。
diff --git a/docs/content/01.detailed/05.services/02.token.md b/docs/content/01.detailed/05.services/02.token.md
new file mode 100644
index 00000000..02c759e9
--- /dev/null
+++ b/docs/content/01.detailed/05.services/02.token.md
@@ -0,0 +1,239 @@
+---
+title: services.token
+description: 当システムのアクセストークン管理に関するビジネスロジックを提供する。
+---
+
+## get_access_token
+データベースから当システムに紐づく SP のアクセストークン文字列を取得する機能を提供する。
+
+#### シグネチャ
+```python[token.py]
+def get_access_token() -> str:
+```
+
+#### 戻り値
+| 型 | 説明 |
+| --- | ---------------------- |
+| str | アクセストークン文字列 |
+
+#### エラー
+
+| 型 | 説明 |
+| ---------------------------------------------------------- | ------------------------------------------------------ |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが存在しない、または読み取れない場合。 |
+
+#### 処理内容
+1. [`service_settings:get_oauth_token`](./01.service_settings.md#get_oauth_token) を呼び出し、データベースからアクセストークン情報を取得する。
+2. レコードが存在しない場合は [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+3. [`check_token_validity`](#check_token_validity) を呼び出し、取得したアクセストークンの有効性を確認する。
+ 有効であれば、アクセストークン文字列を戻り値として返す。
+4. 有効でなければ [`refresh_access_token`](#refresh_access_token) を呼び出し、アクセストークンのリフレッシュを試みる。
+ この戻り値をそのまま戻り値として返す。
+
+
+## get_client_secret
+データベースから当システムに紐づく SP のクライアントシークレット文字列を取得する機能を提供する。
+
+#### シグネチャ
+```python[token.py]
+def get_client_secret() -> str:
+```
+
+#### 戻り値
+| 型 | 説明 |
+| --- | ------------------------------ |
+| str | クライアントシークレット文字列 |
+
+#### エラー
+
+| 型 | 説明 |
+| ------------------------------------------------------------ | ---------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報が存在しない、または読み取れない場合。 |
+
+#### 処理内容
+1. [`service_settings:get_client_credentials`](./01.service_settings.md#get_client_credentials) を呼び出し、データベースからクライアント認証情報を取得する。
+2. レコードが存在しない場合は [`CredentialsError`](../02.foundation/exc.md#credentialserror) を送出する。
+3. 取得したクライアント認証情報からクライアントシークレット文字列を戻り値として返す。
+
+
+## prepare_issuing_url
+当システムに紐づく SP のアクセストークン発行用 URL を準備する機能を提供する。
+
+#### シグネチャ
+```python[token.py]
+def prepare_issuing_url() -> str:
+```
+
+#### 戻り値
+
+| 型 | 説明 |
+| --- | -------------------------- |
+| str | アクセストークン発行用 URL |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報が存在しない、または読み取れない場合。 |
+| [CertificatesError](../02.foundation/exc.md#certificateserror) | SP の証明書情報の取得あるいは新規発行に失敗した場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core Authorization Server から予期しないレスポンスが返された場合。 |
+
+#### 処理内容
+1. サーバー設定値 [`SP.entity_id`](../02.foundation/config.md#spconfig) からアプリケーションの SP エンティティ ID を取得する。
+2. [`service_settings:get_client_credentials`](./01.service_settings.md#get_client_credentials) を呼び出し、データベースからクライアント認証情報を取得する。
+3. クライアント認証情報が存在しない場合、 [`clients.auth:issue_client_credentials`](../06.clients/01.auth.md#issue_client_credentials) を呼び出し、
+ mAP Core Authorization Server からクライアント認証情報を発行・取得する。
+ - `requests.RequestException` が送出された場合は、以下のエラーを再送出する。
+ - [`CertificatesError`](../02.foundation/exc.md#certificateserror): レスポンスのステータスコードが 400 あるいはレスポンスボディのデコードに失敗した場合。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): レスポンスのステータスコードが 401 以外の場合。
+ - 取得したクライアント認証情報を [`service_settings:save_client_credentials`](./01.service_settings.md#save_client_credentials) を呼び出し、データベースに保存する。
+4. リダイレクト URL を生成する。エンドポイント [`api.callback:auth_code`](../04.api/03.callback.md#auth_code)
+ に対応するスキーマとホスト名を含む完全な URL を `flask.url_for` を使用して取得する。
+5. アクセストークン発行用 URL を生成する。
+ - ベース URL として、サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `base_url` を使用する。
+ - エンドポイントは [`MAP_OAUTH_AUTHORIZE_ENDPOINT`](../02.foundation/const.md#map_oauth_authorize_endpoint) を使用する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------- |
+ | response_type | `"code"` |
+ | client_id | ステップ 2 または 3 で取得したクライアント ID |
+ | redirect_uri | ステップ 5 で生成した URL |
+
+
+## issue_access_token
+当システムに紐づく SP のアクセストークンを mAP Core Authorization Server から発行・取得する機能を提供する。
+
+#### シグネチャ
+```python[token.py]
+def issue_access_token(code: str) -> str:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---- | --- | ---------------- |
+| code | str | 認可コード文字列 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --- | ---------------------- |
+| str | アクセストークン文字列 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報が存在しない、または読み取れない場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンの発行に失敗した場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core Authorization Server から予期しないレスポンスが返された場合。 |
+
+#### 処理内容
+1. [`service_settings:get_client_credentials`](./01.service_settings.md#get_client_credentials) を呼び出し、データベースからクライアント認証情報を取得する。
+ クライアント認証情報が存在しない場合は [`CredentialsError`](../02.foundation/exc.md#credentialserror) を送出する。
+3. [`clients.auth:issue_oauth_token`](../06.clients/01.auth.md#issue_oauth_token) を呼び出し、引数 `code` を使用してアクセストークンの発行・取得を試みる。
+ `requests.RequestException` が送出された場合は、以下のエラーを再送出する。
+ - [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror): レスポンスのステータスコードが 400 あるいはレスポンスボディのデコードに失敗した場合。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): レスポンスのステータスコードが 401 以外の場合。
+4. [`service_settings:save_oauth_token`](./01.service_settings.md#save_oauth_token) を呼び出し、取得したアクセストークン情報をデータベースに保存する。
+5. 取得したアクセストークン文字列を戻り値として返す。
+
+
+## check_token_validity
+アクセストークンの有効性を確認する機能を提供する。
+
+#### シグネチャ
+```python[token.py]
+def check_token_validity(token: str) -> bool:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----- | --- | ---------------------- |
+| token | str | アクセストークン文字列 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---- | ------------------------------ |
+| bool | アクセストークンが有効であるか |
+
+#### 処理内容
+1. [`clients.auth:check_token_validity`](../06.clients/01.auth.md#check_token_validity) を呼び出し、引数 `token` を使用してアクセストークンの有効性を確認する。
+ `requests.RequestException` が送出された場合は、 `False`{lang=python} を戻り値として返す。
+2. 有効性の確認結果を戻り値として返す。有効でなければエラーが送出されるため、ここでは `True`{lang=python} が戻り値として返されることになる。
+
+
+
+## refresh_access_token
+アクセストークンをリフレッシュする機能を提供する。
+
+#### シグネチャ
+```python[token.py]
+def refresh_access_token() -> str:
+```
+
+#### 戻り値
+
+| 型 | 説明 |
+| --- | -------------------------------------- |
+| str | リフレッシュ後のアクセストークン文字列 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報が存在しない、または読み取れない場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンのリフレッシュに失敗した場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core Authorization Server から予期しないレスポンスが返された場合。 |
+
+#### 処理内容
+1. [`service_settings:get_oauth_token`](./01.service_settings.md#get_oauth_token) を呼び出し、データベースからアクセストークン情報を取得する。
+ アクセストークン情報が存在しない場合は [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+3. [`service_settings:get_client_credentials`](./01.service_settings.md#get_client_credentials) を呼び出し、データベースからクライアント認証情報を取得する。
+ クライアント認証情報が存在しない場合は [`CredentialsError`](../02.foundation/exc.md#credentialserror) を送出する。
+5. [`clients.auth:refresh_oauth_token`](../06.clients/01.auth.md#refresh_oauth_token) を呼び出し、アクセストークンのリフレッシュを試みる。
+ `requests.RequestException` が送出された場合は、以下のエラーを再送出する。
+ - [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror): レスポンスのステータスコードが 400 あるいはレスポンスボディのデコードに失敗した場合。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): レスポンスのステータスコードが 401 以外の場合。
+6. [`service_settings:save_oauth_token`](./01.service_settings.md#save_oauth_token) を呼び出し、取得したアクセストークン情報をデータベースに保存する。
+7. 取得したアクセストークン文字列を戻り値として返す。
+
+
+## get_token_owner
+アクセストークンの所有者を取得する機能を提供する。
+
+#### シグネチャ
+```python[token.py]
+def get_token_owner() -> UserDetail:
+```
+
+#### 戻り値
+| 型 | 説明 |
+| --------------------------------------------------------- | ---------------------------- |
+| [UserDetail](../03.entities/13.user-detail.md#userdetail) | アクセストークンの所有者情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報が存在しない、または読み取れない場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークン情報が存在しない、または読み取れない場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core Authorization Server から予期しないレスポンスが返された場合。 |
+
+#### 処理内容
+1. [`get_access_token`](#get_access_token) を呼び出し、アクセストークン文字列を取得する。
+2. [`get_client_secret`](#get_client_secret) を呼び出し、クライアントシークレット文字列を取得する。
+3. [`clients.users:get_self`](../06.clients/04.users.md#get_self) を呼び出し、アクセストークンの所有者情報を取得する。
+ `requests.RequestException` が送出された場合は、以下のエラーを再送出する。
+ - [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror): レスポンスのステータスコードが 400 の場合。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): レスポンスのステータスコードが 401 以外、
+ あるいはレスポンスボディのバリデーションに失敗した場合。
+4. 取得したユーザー情報を [`UserDetail`](../03.entities/13.user-detail.md#userdetail) モデルに変換して戻り値として返す。
diff --git a/docs/content/01.detailed/05.services/03.repositories.md b/docs/content/01.detailed/05.services/03.repositories.md
new file mode 100644
index 00000000..72c22a57
--- /dev/null
+++ b/docs/content/01.detailed/05.services/03.repositories.md
@@ -0,0 +1,338 @@
+---
+title: services.repositories
+description: 当システムのリポジトリ管理に関するビジネスロジックを提供する。
+---
+
+
+## search
+検索条件をもとにリポジトリ(に対応する SP コネクタ)を検索する機能を提供する。
+
+#### シグネチャ
+```python[repositories.py]
+@overload
+def search(criteria: RepositoriesCriteria) -> SearchResult[RepositorySummary]: ...
+@overload
+def search(
+ criteria: RepositoriesCriteria, *, raw: t.Literal[True]
+) -> SearchResponse[MapService]: ...
+
+def search(
+ criteria: RepositoriesCriteria, *, raw: bool = False
+) -> SearchResult[RepositorySummary] | SearchResponse[MapService]:
+```
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| -------- | ---------------------------------------------------------- | -------------------- | --------------------------------------------------------------- |
+| criteria | [RepositoriesCriteria](./09.utils.md#repositoriescriteria) | - | 検索条件を保持するインスタンス |
+| raw | bool | `False`{lang=python} | `True`{lang=python} の場合、mAP Core からの生のレスポンスを返す |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
+| [SearchResult](../03.entities/07.search-request.md#searchresult)\[[RepositorySummary](../03.entities/10.summaries.md#repositorysummary)] | 検索条件にマッチするリポジトリのサマリー情報のリストを含むオブジェクト |
+| [SearchResponse](../03.entities/07.search-request.md#searchresponse)\[[MapService](../03.entities/03.map-service.md#mapservice)] | mAP Core からの生のレスポンスを表すオブジェクト。`raw`{lang=python} 引数が `True`{lang=python} の場合に返される。 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ----------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効である場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報の取得に失敗した場合。 |
+| [InvalidQueryError](../02.foundation/exc.md#invalidqueryerror) | 検索条件のクエリが不正である場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core からのレスポンスが予期しない形式である場合。 |
+
+
+
+#### 処理内容
+1. 引数 `criteria` をもとに、 [`utils:make_criteria_object`](./09.utils.md#make_criteria_object) を呼び出し、リクエストのクエリパラメータを構築する。
+2. [`token:get_access_token`](./02.token.md#get_access_token) を呼び出し、アクセストークン文字列を取得する。
+3. [`token:get_client_secret`](./02.token.md#get_client_secret) を呼び出し、クライアントシークレット文字列を取得する。
+4. [`clients.services:search`](../06.clients/02.repositories.md#search) を呼び出し、検索を実行する。
+ `requests.RequestException` が送出された場合、
+ - レスポンスのステータスコードが 401 であれば、[`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+ - それ以外の場合は、[`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+5. 検索結果の戻り値が [`MapError`](../03.entities/06.map-error.md#maperror) である場合は、[`InvalidQueryError`](../02.foundation/exc.md#invalidqueryerror) を送出する。
+6. 引数 `raw` が `True`{lang=python} であれば、検索結果をそのまま戻り値として返す。
+7. 引数 `raw` が `False`{lang=python} であれば、検索結果を [`SearchResult`](../03.entities/07.search-request.md#searchresult) に変換して戻り値として返す。
+ - 検索結果のリストの各要素は [`MapService`](../03.entities/03.map-service.md#mapservice) から [`RepositorySummary`](../03.entities/10.summaries.md#repositorysummary) に変換する。
+ - リポジトリ ID は [`utils:resolve_repository_id`](./09.utils.md#resolve_repository_id) を使用して、サービス ID から解決する。
+
+
+## get_by_id
+ID を指定してリポジトリ(に対応する SP コネクタ)の詳細情報を取得する機能を提供する。
+
+#### シグネチャ
+```python[repositories.py]
+@overload
+def get_by_id(
+ repository_id: str, *, more_detail: bool = False
+) -> RepositoryDetail | None: ...
+@overload
+def get_by_id(repository_id: str, *, raw: t.Literal[True]) -> MapService | None: ...
+
+
+def get_by_id(
+ repository_id: str, *, raw: bool = False, more_detail: bool = False
+) -> RepositoryDetail | MapService | None:
+```
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ---- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| repository_id | str | - | 取得するリポジトリの ID |
+| raw | bool | `False`{lang=python} | `True`{lang=python} の場合、mAP Core からの生のレスポンスを返す。 |
+| more_detail | bool | `False`{lang=python} | `True`{lang=python} の場合、リポジトリの詳細情報を取得する(`raw`{lang=python} 引数が `True`{lang=python} の場合は無視される)。 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------------------------------- | ----------------------------------------------- |
+| [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 取得したリポジトリの詳細情報を表すオブジェクト |
+| [MapService](../03.entities/03.map-service.md#mapservice) | mAP Core からの生のレスポンスを表すオブジェクト |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ----------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効である場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報の取得に失敗した場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core からのレスポンスが予期しない形式である場合。 |
+
+
+#### 処理内容
+1. [`token:get_access_token`](./02.token.md#get_access_token) を呼び出し、アクセストークン文字列を取得する。
+2. [`token:get_client_secret`](./02.token.md#get_client_secret) を呼び出し、クライアントシークレット文字列を取得する。
+3. [`clients.services:get_by_id`](../06.clients/02.repositories.md#get_by_id) を呼び出し、リポジトリの詳細情報の取得を試みる。
+ `requests.RequestException` が送出された場合、
+ - レスポンスのステータスコードが 401 であれば、[`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+ - それ以外の場合は、[`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+4. 取得結果が [`MapError`](../03.entities/06.map-error.md#maperror) である場合は、エラーログを出力し、`None`{lang=python} を戻り値として返す。
+5. 引数 `raw` が `True`{lang=python} であれば、取得結果をそのまま戻り値として返す。
+6. 引数 `raw` が `False`{lang=python} であれば、取得結果を [`RepositoryDetail`](../03.entities/11.repository-detail.md#repositorydetail) に変換して戻り値として返す。
+ - 変換には [`utils:make_repository_detail`](./09.utils.md#make_repository_detail) を使用する。
+ 引数 `more_detail` が `True`{lang=python} であれば、この呼び出しの引数 `more_detail` も `True`{lang=python} にして詳細情報を取得する。
+
+## create
+リポジトリ(に対応する SP コネクタ)を作成する機能を提供する。
+
+#### シグネチャ
+```python[repositories.py]
+def create(repository: RepositoryDetail) -> RepositoryDetail:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---------- | --------------------------------------------------------------------------- | ------------------------ |
+| repository | [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 作成するリポジトリの情報 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------------------------------- | -------------------------- |
+| [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 作成されたリポジトリの情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | --------------------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効である場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報の取得に失敗した場合。 |
+| [InvalidFormError](../02.foundation/exc.md#invalidformerror) | 引数 `repository` の内容が不正である場合。 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | mAP Core からのレスポンスにリソースの不正エラーが含まれる場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core からのレスポンスが予期しない形式である場合。 |
+
+#### 処理内容
+1. [`users.:get_system_admins`](../05.services/05.users.md#get_system_admins) を呼び出し、システム管理者のユーザー情報を取得する。
+2. 引数 `repository` とシステム管理者情報をもとに、 [`utils:prepare_service`](./09.utils.md#prepare_service) および
+ [`utils:prepare_role_groups`](./09.utils.md#prepare_role_groups) を呼び出し、リポジトリの作成にサービスリソースとロールグループのリソースを準備する。
+3. [`token:get_access_token`](./02.token.md#get_access_token) を呼び出し、アクセストークン文字列を取得する。
+4. [`token:get_client_secret`](./02.token.md#get_client_secret) を呼び出し、クライアントシークレット文字列を取得する。
+5. [`clients.services:create`](../06.clients/02.repositories.md#create) を呼び出し、リポジトリの作成を試みる。
+ `requests.RequestException` が送出された場合、
+ - レスポンスのステータスコードが 401 であれば、[`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+ - それ以外の場合は、[`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+6. 取得結果の戻り値の型が [`MapError`](../03.entities/06.map-error.md#maperror) である場合は、エラーログを出力し、
+ 含まれるエラーメッセージをもとに以下の例外を送出する。
+ - [`ResourceInvalid`](../02.foundation/exc.md#resourceinvalid): エラーメッセージが定数
+ [`MAP_DUPLICATE_ID_PATTERN`](../02.foundation/const.md#map_duplicate_id_pattern) にマッチする場合。リポジトリ ID の重複エラーであると判断する。
+ - [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror): エラーメッセージが定数
+ [`MAP_NO_RIGHTS_CREATE_PATTERN`](../02.foundation/const.md#map_no_rights_create_pattern) にマッチする場合。アクセストークンの権限不足エラーであると判断する。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): それ以外の場合は、予期しないエラーであると判断する。
+7. 作成されたリポジトリの戻り値を [`RepositoryDetail`](../03.entities/11.repository-detail.md#repositorydetail) に変換して戻り値として返す。
+ - 変換には [`utils:make_repository_detail`](./09.utils.md#make_repository_detail) を使用する。
+
+## update
+リポジトリ(に対応する SP コネクタ)を更新する機能を提供する。 PATCH メソッドを使用した更新を行う。
+
+#### シグネチャ
+```python[repositories.py]
+def update(repository: RepositoryDetail) -> RepositoryDetail:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---------- | --------------------------------------------------------------------------- | ------------------------ |
+| repository | [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 更新するリポジトリの情報 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------------------------------- | -------------------------- |
+| [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 更新されたリポジトリの情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ----------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効である場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報の取得に失敗した場合。 |
+| [InvalidFormError](../02.foundation/exc.md#invalidformerror) | 引数 `repository` の内容が不正である場合。 |
+| [ResourceNotFound](../02.foundation/exc.md#resourcenotfound) | 更新対象のリポジトリが存在しない場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core からのレスポンスが予期しない形式である場合。 |
+
+#### 処理内容
+1. サーバー設定値 [`MAP_CORE.update_strategy`](../02.foundation/config.md#mapcoreconfig) を参照し、リポジトリの更新方法を判断する。
+ 値が `"put"` の場合は、 [``update_put``](#update_put) を呼び出し戻り値として返す。
+2. [`utils:validate_repository_to_map_service`](./09.utils.md#validate_repository_to_map_service) を呼び出し、
+ 引数 `repository` の内容のバリデーションと [`MapService`](../03.entities/03.map-service.md#mapservice) への変換を試みる。
+ - 検証に失敗した場合は、[`ResourceInvalid`](../02.foundation/exc.md#resourceinvalid) が送出される。
+3. 引数 `repository` からリポジトリ ID 、検証済みの サービスリソースインスタンスからサービス ID を取得する。
+4. リポジトリ ID をもとに、 [`get_by_id`](#get_by_id) を呼び出し、更新対象のリポジトリの情報を取得する。
+ - 取得できない場合は、[`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) を送出する。
+5. 検証済みサービスリソースのサービス URL と、更新対象のリポジトリのサービス URL を比較し、
+ 異なる場合は、[`InvalidFormError`](../02.foundation/exc.md#invalidformerror) を送出する。
+ - サービス URL は、リポジトリ ID に使用されるため、更新前後で同一でなければならない。
+6. [`utils:build_patch_operations`](./09.utils.md#build_patch_operations) を呼び出し、更新前後のリポジトリ情報の差分から、mAP Core の PATCH API に渡す更新操作のリストを構築する。
+7. [`token:get_access_token`](./02.token.md#get_access_token) を呼び出し、アクセストークン文字列を取得する。
+8. [`token:get_client_secret`](./02.token.md#get_client_secret) を呼び出し、クライアントシークレット文字列を取得する。
+9. [`clients.services:patch_by_id`](../06.clients/02.repositories.md#patch_by_id) を呼び出し、リポジトリの更新を試みる。
+ `requests.RequestException` が送出された場合、
+ - レスポンスのステータスコードが 401 であれば、[`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+ - それ以外の場合は、[`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+10. 更新結果の戻り値の型が [`MapError`](../03.entities/06.map-error.md#maperror) である場合は、エラーログを出力し、
+ 含まれるエラーメッセージをもとに以下の例外を送出する。
+ - [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound): エラーメッセージが定数
+ [`MAP_NOT_FOUND_PATTERN`](../02.foundation/const.md#map_not_found_pattern) にマッチする場合。
+ - [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror): エラーメッセージが定数
+ [`MAP_NO_RIGHTS_UPDATE_PATTERN`](../02.foundation/const.md#map_no_rights_update_pattern) にマッチする場合。アクセストークンの権限不足エラーであると判断する。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): それ以外の場合は、予期しないエラーであると判断する。
+11. 更新されたリポジトリの戻り値を [`RepositoryDetail`](../03.entities/11.repository-detail.md#repositorydetail) に変換して戻り値として返す。
+ - 変換には [`utils:make_repository_detail`](./09.utils.md#make_repository_detail) を使用する。
+
+
+## update_put
+リポジトリ(に対応する SP コネクタ)を更新する機能を提供する。 PUT メソッドを使用した更新を行う。
+
+#### シグネチャ
+```python[repositories.py]
+def update_put(repository: RepositoryDetail) -> RepositoryDetail:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---------- | --------------------------------------------------------------------------- | ------------------------ |
+| repository | [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 更新するリポジトリの情報 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------------------------------- | -------------------------- |
+| [RepositoryDetail](../03.entities/11.repository-detail.md#repositorydetail) | 更新されたリポジトリの情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ----------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効である場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報の取得に失敗した場合。 |
+| [InvalidFormError](../02.foundation/exc.md#invalidformerror) | 引数 `repository` の内容が不正である場合。 |
+| [ResourceNotFound](../02.foundation/exc.md#resourcenotfound) | 更新対象のリポジトリが存在しない場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core からのレスポンスが予期しない形式である場合。 |
+
+#### 処理内容
+1. サーバー設定値 [`MAP_CORE.update_strategy`](../02.foundation/config.md#mapcoreconfig) を参照し、リポジトリの更新方法を判断する。
+ 値が `"patch"` の場合は、 [``update``](#update) を呼び出し戻り値として返す。
+2. [`utils:validate_repository_to_map_service`](./09.utils.md#validate_repository_to_map_service) を呼び出し、
+ 引数 `repository` の内容のバリデーションと [`MapService`](../03.entities/03.map-service.md#mapservice) への変換を試みる。
+ - 検証に失敗した場合は、[`ResourceInvalid`](../02.foundation/exc.md#resourceinvalid) が送出される。
+3. 検証済みの引数 `repository` からリポジトリ ID を取得する。
+4. リポジトリ ID をもとに、 [`get_by_id`](#get_by_id) を呼び出し、更新対象のリポジトリの情報を取得する。
+ - 取得できない場合は、[`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) を送出する。
+5. 検証済みサービスリソースのサービス URL と、更新対象のリポジトリのサービス URL を比較し、
+ 異なる場合は、[`InvalidFormError`](../02.foundation/exc.md#invalidformerror) を送出する。
+ - サービス URL は、リポジトリ ID に使用されるため、更新前後で同一でなければならない。
+6. [`token:get_access_token`](./02.token.md#get_access_token) を呼び出し、アクセストークン文字列を取得する。
+7. [`token:get_client_secret`](./02.token.md#get_client_secret) を呼び出し、クライアントシークレット文字列を取得する。
+8. [`clients.services:put_by_id`](../06.clients/02.repositories.md#put_by_id) を呼び出し、リポジトリの更新を試みる。
+ `requests.RequestException` が送出された場合、
+ - レスポンスのステータスコードが 401 であれば、[`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+ - それ以外の場合は、[`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+9. 更新結果の戻り値の型が [`MapError`](../03.entities/06.map-error.md#maperror) である場合は、エラーログを出力し、
+ 含まれるエラーメッセージをもとに以下の例外を送出する。
+ - [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound): エラーメッセージが定数
+ [`MAP_NOT_FOUND_PATTERN`](../02.foundation/const.md#map_not_found_pattern) にマッチする場合。
+ - [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror): エラーメッセージが定数
+ [`MAP_NO_RIGHTS_UPDATE_PATTERN`](../02.foundation/const.md#map_no_rights_update_pattern) にマッチする場合。アクセストークンの権限不足エラーであると判断する。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): それ以外の場合は、予期しないエラーであると判断する。
+10. 更新されたリポジトリの戻り値を [`RepositoryDetail`](../03.entities/11.repository-detail.md#repositorydetail) に変換して戻り値として返す。
+ - 変換には [`utils:make_repository_detail`](./09.utils.md#make_repository_detail) を使用する。
+
+
+## delete_by_id
+リポジトリ(に対応する SP コネクタ)を削除する機能を提供する。
+
+#### シグネチャ
+```python[repositories.py]
+def delete_by_id(repository_id: str, service_name: str) -> None:
+```
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | --- | ---------- | ---------------------------------------------------------------------------- |
+| repository_id | str | - | 削除するリポジトリの ID |
+| service_name | str | - | 削除するリポジトリに対応するサービスの名前。削除操作の確認のために使用する。 |
+
+#### エラー
+
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ----------------------------------------------------- |
+| [DatabaseError](../02.foundation/exc.md#databaseerror) | データベース操作で予期しないエラーが発生した場合。 |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効である場合。 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアント認証情報の取得に失敗した場合。 |
+| [ResourceNotFound](../02.foundation/exc.md#resourcenotfound) | 削除対象のリポジトリが存在しない場合。 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core からのレスポンスが予期しない形式である場合。 |
+
+#### 処理内容
+1. [`get_by_id`](#get_by_id) を呼び出し、削除対象のリポジトリの情報を取得する。
+ - 取得できない場合は、[`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) を送出する。
+2. 取得したリポジトリのサービス名と、引数 `service_name` を比較し、異なる場合は、[`InvalidFormError`](../02.foundation/exc.md#invalidformerror) を送出する。
+ - 削除操作の確認のため、サービス名が一致しない場合は削除を行わない。
+3. リポジトリ ID から [`utils:resolve_service_id`](./09.utils.md#resolve_service_id) を呼び出し、サービス ID を解決する。
+4. 取得したリポジトリの情報から、紐づいているグループとロールグループを取得する。
+ - 取得されるリポジトリ情報に、当システムに関係のないグループは含まれない。
+5. [`token:get_access_token`](./02.token.md#get_access_token) を呼び出し、アクセストークン文字列を取得する。
+6. [`token:get_client_secret`](./02.token.md#get_client_secret) を呼び出し、クライアントシークレット文字列を取得する。
+7. [`clients.services:delete_by_id`](../06.clients/02.repositories.md#delete_by_id) を呼び出し、リポジトリの削除を試みる。
+8. `requests.RequestException` が送出された場合、
+ - レスポンスのステータスコードが 401 であれば、[`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+ - それ以外の場合は、[`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+9. 削除処理の戻り値の型が [`MapError`](../03.entities/06.map-error.md#maperror) である場合は、エラーログを出力し、
+ 含まれるエラーメッセージをもとに以下の例外を送出する。
+ - [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound): エラーメッセージが定数
+ [`MAP_NOT_FOUND_PATTERN`](../02.foundation/const.md#map_not_found_pattern) にマッチする場合。
+ - [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror): それ以外の場合は、予期しないエラーであると判断する。
+10. 戻り値が `None`{lang=python} の場合は、削除成功と判断し、[`groups:delete_multiple`](./04.groups.md#delete_multiple) を呼び出し、
+ あらかじめ取得したグループとロールグループを削除し、処理を終了する。
diff --git a/docs/content/01.detailed/05.services/04.groups.md b/docs/content/01.detailed/05.services/04.groups.md
new file mode 100644
index 00000000..e31ef2a3
--- /dev/null
+++ b/docs/content/01.detailed/05.services/04.groups.md
@@ -0,0 +1,279 @@
+---
+title: services.groups
+description: 当システムのグループ管理に関するビジネスロジックを提供する。
+---
+
+## creat
+グループを作成する。
+
+#### シグネチャ
+```python[groups.py]
+def creat(group:GroupDetail) -> GroupDetail:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ----- | ------------------------------------------------------------ | ---------------------- |
+| group | [GroupDetail](../03.entities/12.group-detail.md#groupdetail) | 作成するグループの情報 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------------------------------ | -------------------- |
+| [GroupDetail](../03.entities/12.group-detail.md#groupdetail) | グループオブジェクト |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB からの取得に失敗した場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB からの取得に失敗した場合 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | mAP Core API のレスポンスが [MapError](../03.entities/06.map-error.md) の場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. 引数の `group` の属性をもとに、新しい [`MapGroup`](../03.entities/04.map-group.md#mapgroup) オブジェクトを作成する。
+2. サーバー設定値のシステム管理者 ID を[`MapGroup`](../03.entities/04.map-group.md#mapgroup) オブジェクトの [`members`](../03.entities/04.map-group.md#member) と[`administrator`](../03.entities/04.map-group.md#administrator) に含める。
+3. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+4. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+5. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+6. [`client.groups:post`](../06.clients/03.groups.md#post) を呼び出す。
+7. アクセストークンが無効または期限切れの場合 [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+8. mAP Core API のサーバーエラー等が発生した場合 [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+9. レスポンスが [`MapError`](../03.entities/06.map-error.md) の場合 [`ResourceInvalid`](../02.foundation/exc.md#resourceinvalid) を送出する。
+10. 作成されたグループ情報を [`GroupDetail`](../03.entities/12.group-detail.md) オブジェクトにマッピングする。
+11. 作成されたグループ詳細情報オブジェクトを返す。
+
+## get_by_id
+id をもとにグループ詳細情報を取得する。
+
+#### シグネチャ
+```python[groups.py]
+def get_by_id(group_id:str) -> GroupDetail | None:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| -------- | --- | --------------------- |
+| group_id | str | 取得するグループの id |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------------------------------ | -------------------- |
+| [GroupDetail](../03.entities/12.group-detail.md#groupdetail) | グループオブジェクト |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------------------------------------------------------- | -------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB に存在しない場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB に存在しない場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+2. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+3. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+4. [`client.groups:get_by_id`](../06.clients/03.groups.md#get_by_id) を呼び出す。
+5. アクセストークンが無効または期限切れの場合 [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+6. mAP Core API のサーバーエラー等が発生した場合 [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+7. レスポンスが [`MapError`](../03.entities/06.map-error.md) の場合 `None` を返す。
+8. 取得したグループ情報を [`GroupDetail`](../03.entities/12.group-detail.md#groupdetail) オブジェクトにマッピングする。
+9. 取得したグループ詳細情報オブジェクトを返す。
+
+
+## update
+グループを更新する。
+
+#### シグネチャ
+```python[groups.py]
+def update(group:GroupDetail) -> GroupDetail:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ----- | ------------------------------------------------------------ | ---------------------- |
+| group | [GroupDetail](../03.entities/12.group-detail.md#groupdetail) | 更新するグループの情報 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ------------------------------------------------------------ | ------------------------------ |
+| [GroupDetail](../03.entities/12.group-detail.md#groupdetail) | 更新されたグループオブジェクト |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB に存在しない場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB に存在しない場合 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | mAP Core API のレスポンスが [MapError](../03.entities/06.map-error.md) の場合 |
+| [ResourceNotFound](../02.foundation/exc.md#resourcenotfound) | 更新するグループが存在しない場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+2. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+3. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+4. [`client.groups:get_by_id`](../06.clients/03.groups.md#get_by_id) を呼び出す。
+5. アクセストークンが無効または期限切れの場合 [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+6. mAP Core API のサーバーエラー等が発生した場合 [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+7. レスポンスが [`MapError`](../03.entities/06.map-error.md) の場合 [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) を送出する。
+8. 現在登録されている情報と `group` を用いて `build_patch_operations` で`list[PatchOperation]` を作成する。
+9. `exclude` に`"meta","members","administrator"` を設定し、 [`client.groups:patch_by_id`](../06.clients/03.groups.md#patch_by_id) を呼び出す。
+10. 更新されたグループ情報を [`GroupDetail`](../03.entities/12.group-detail.md#groupdetail) オブジェクトにマッピングする。
+11. 更新されたグループ詳細情報オブジェクトを返す。
+
+
+## delete_multiple
+複数のグループを削除する。
+
+#### シグネチャ
+```python[groups.py]
+def delete(group_ids:set[str]) -> list[tuple[str, str]]| None:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| --------- | -------- | ---------------------------- |
+| group_ids | set[str] | 削除するグループの id リスト |
+
+#### 戻り値
+| 型 | 説明 |
+| ----------------------- | --------------------------------------- |
+| None | すべてのグループの削除成功時 |
+| list\[tuple\[str, str]] | 削除に失敗したグループ ID とdetail の組 |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB に存在しない場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB に存在しない場合 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | mAP Core API のレスポンスが [MapError](../03.entities/06.map-error.md) の場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. group_ids をもとに `method`="DELETE",`path`="/Groups/{id}" でlist\[[BulkOperation](../03.entities/09.bulk-request.md#bulkoperation)] を作成する。
+2. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+3. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+4. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+5. [`client.bulk:post`](../06.clients/06.bulk.md#post) を呼び出す。
+6. アクセストークンが無効または期限切れの場合 [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+7. mAP Core API のサーバーエラー等が発生した場合 [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+8. レスポンスが [`MapError`](../03.entities/06.map-error.md) の場合 [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) を送出する。
+9. すべて削除に成功していれば None を返す。
+10. 削除に失敗したグループがあればグループ ID と[`response`](../03.entities/09.bulk-request.md#bulkoperation) に含まれる error エンティティの detail をtuple にしてリストで返す。
+
+## delete_by_id
+単一のグループを削除する。
+
+#### シグネチャ
+```python[groups.py]
+def delete_by_id(group_id:str) -> None:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| --------- | --- | --------------------- |
+| group_ids | str | 削除するグループの id |
+
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB に存在しない場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB に存在しない場合 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | mAP Core API のレスポンスが [MapError](../03.entities/06.map-error.md) の場合 |
+| [ResourceNotFound](../02.foundation/exc.md#resourcenotfound) | 更新するグループが存在しない場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+2. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+3. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+4. [`client.group:delete_by_id`](../06.clients/03.groups.md#delete_by_id) を呼び出す。
+5. アクセストークンが無効または期限切れの場合 [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror) を送出する。
+6. mAP Core API のサーバーエラー等が発生した場合 [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+7. レスポンスが [`MapError`](../03.entities/06.map-error.md) の場合 [`ResourceNotFound`](../02.foundation/exc.md#resourcenotfound) を送出する。
+
+## search
+グループ一覧を取得する。
+
+#### シグネチャ
+```python[groups.py]
+def search(query:GroupSearchCriteria) -> list[GroupDetail]:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ----- | ------------------- | ------------------------------------ |
+| query | GroupSearchCriteria | 取得するグループを絞り込むフィルター |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----------- | -------------------------- |
+| GroupResult | グループオブジェクトの一覧 |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB に存在しない場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB に存在しない場合 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | mAP Core API のレスポンスが [MapError](../03.entities/06.map-error.md) の場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. GroupSearchCriteria をrequest_parm とする。
+2. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+3. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+4. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+5. [`client.groups:search`] を呼び出す。
+6. レスポンスが [MapError](../03.entities/06.map-error.md) の場合 [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) を送出する。
+7. グループ情報を `GroupSummary` オブジェクトにマッピングする。
+8. `GroupSummary` のリストをもとに `GroupResult` を作成する。
+9. `GroupResult` を返す。
+
+
+## update_member
+グループメンバーの追加 /除外を行う。
+
+#### シグネチャ
+```python[groups.py]
+def update_member(add:set[str], remove:set[str], group_id: str) -> GroupDetail:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| -------- | --------- | ------------------------------- |
+| group_id | str | 追加 /除外する対象のグループ ID |
+| add | set\[str] | 追加するユーザーの ID |
+| remove | set\[str] | 除外するユーザーの ID |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------------------------------------------------------ | ------------------------------ |
+| [GroupDetail](../03.entities/12.group-detail.md#groupdetail) | 更新されたグループオブジェクト |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB に存在しない場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB に存在しない場合 |
+| [RequestConflict](../02.foundation/exc.md#requestconflict) | リクエスト内容に競合がある場合 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | mAP Core API のレスポンスが [MapError](../03.entities/06.map-error.md) の場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | mAP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+2. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+3. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+4. group_id をもとに [`client.groups:get_by_id`](../06.clients/03.groups.md#get_by_id) を呼び出し、詳細情報から現在所属しているメンバーリストを確認する。
+5. レスポンスが [MapError](../03.entities/06.map-error.md) の場合 [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) を送出する。
+6. add に現在所属しているユーザー ID が含まれていれば取り除く。
+7. remove に現在所属していないユーザー ID ,サーバー設定値のシステム管理者 ID が含まれていれば取り除く。
+8. remove のメンバーを取り除いても所属するメンバーが 0にならないことを確認し 0になる場合は add にシステム管理者 ID を追加する。
+9. `if add & remove` がtrue ならば [RequestConflict](../02.foundation/exc.md#requestconflict) を送出する。
+10. [`build_update_member_operations`](../05.services/09.utils.md#build_update_member_operations) でlist\[PatchOperation] を作成する。
+11. `include` に`"members"` を設定し、 [`client.groups:patch_by_id`](../06.clients/03.groups.md#patch_by_id) を呼び出す。
+12. レスポンスが [MapError](../03.entities/06.map-error.md) の場合 [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) を送出する。
+13. 更新されたグループ情報を [`GroupDetail`](../03.entities/12.group-detail.md) オブジェクトにマッピングする。
+14. 更新されたグループ詳細情報オブジェクトを返す。
diff --git a/docs/content/01.detailed/05.services/05.users.md b/docs/content/01.detailed/05.services/05.users.md
new file mode 100644
index 00000000..ae6d00a0
--- /dev/null
+++ b/docs/content/01.detailed/05.services/05.users.md
@@ -0,0 +1,36 @@
+---
+title: services.users
+description: 当システムのユーザー管理に関するビジネスロジックを提供する。
+---
+
+## search
+検索条件をもとにユーザを検索する機能を提供する。
+
+
+## get_by_id
+ユーザ ID を指定してユーザの詳細情報を取得する機能を提供する。
+
+
+## get_by_eppn
+ユーザの ePPN を指定してユーザの詳細情報を取得する機能を提供する。
+
+
+## create
+
+
+
+## update
+
+
+## update_put
+
+
+## update_affiliations
+
+
+
+## get_system_admins
+
+
+
+## count
diff --git a/docs/content/01.detailed/05.services/06.bulk.md b/docs/content/01.detailed/05.services/06.bulk.md
new file mode 100644
index 00000000..bf9a2b89
--- /dev/null
+++ b/docs/content/01.detailed/05.services/06.bulk.md
@@ -0,0 +1,246 @@
+---
+title: services.bulk
+description: 当システムのリソースをまたぐ一括処理に関するビジネスロジックを提供する。
+---
+
+## save_file
+ファイルを保存する
+
+#### シグネチャ
+```python[bulk.py]
+def save_file(temporary_id:str, repository_id:str) -> uuid.UUID:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------- | --- | ------------------------------------ |
+| temporary_id | str | 仮アップロードされたファイルの識別子 |
+| repository_id | str | 選択されたリポジトリの ID |
+
+#### 戻り値
+| 型 | 説明 |
+| --------- | ----------- |
+| uuid.UUID | ファイル ID |
+
+#### 処理内容
+1. temporary_id をもとにファイルを取得する。
+2. ファイルが存在しない場合,形式が csv,tsv,excel と異なる場合は ResourceInvalid を送出する。
+3. UUIDv7 のファイル ID を作成する。
+4. 年/月のディレクトリにファイルを移動する。
+5. DB のfiles テーブルに id, file_path, file_content["repositories"] を保存する。
+6. ファイル ID を返却する。
+7. 例外が発生した場合 [delete_temporary_file](#delete_temporary_file) で temporary_id のファイルを削除したのちその例外を raise する。
+
+## validate_upload_data
+アップロードされたデータの検証をおこなう celery のタスク
+
+#### シグネチャ
+```python[bulk.py]
+def validate_upload_data(temporary_id:uuid.UUID):
+```
+
+#### デコレータ
+- `@shared_task` : アプリケーションインスタンスに依存せずタスク定義を行うために用いる
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------ | --------- | ------------------------------------ |
+| temporary_id | uuid.UUID | 仮アップロードされたファイルの識別子 |
+
+#### 戻り値
+| 型 | 説明 |
+| --------- | ----------------------------- |
+| uuid.UUID | 検証結果を保存したデータの ID |
+#### 処理内容
+1. temporary_id をもとに files テーブルから file_path ,file_content を取得する。
+2. file_content から repository_id を取り出す。
+3. repository_id を引数に [`get_repository_member`](#get_repository_member) で `group_ids` と `user_ids` を取得する。
+4. [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) が発生した場合リトライする。
+5. [`read_file`](#read_file) を実行しファイル内容からユーザーのリストを取得する。
+6. ユーザー情報について以下を繰り返す。
+ - ファイル内容に使われている文字の種類や文字数に不正がないか、グループIDが `group_ids` に含まれているか確認する。
+ - 内容に問題があれば status をerror,code をエラー内容として[`CheckResult`](../03.entities/15.bulk.md#checkresult) オブジェクトを作成する。
+ - user_id が空白または `user_ids` に含まれていない場合 status をcreate, code をNone,として[`CheckResult`] オブジェクトを作成し `check_result` に追加する。
+ - user_idが `user_ids` に含まれている場合 update_list に追加する。
+7. update_list のid で[`client.users:get_by_id`](../06.clients/04.users.md#get_by_id)
+8. ファイルのユーザー情報と比較して変更があれば status をupdate として [`CheckResult`] とする。
+9. 以下の変更不可能な属性が変更されている場合は status を skip,code を警告内容として [`CheckResult`] オブジェクトを作成し `check_result` に追加する。
+ - id
+ - userName
+ - meta
+ - eduPersonPrincipalNames
+10. 変更がなければ status をskip ,code を None として [`CheckResult`] オブジェクトを作成し `check_result` に追加する。
+11. check_result を用いて ValidateSummary を作成する。
+12. `user_ids` に含まれているがファイル内容に含まれていない id のユーザー情報を取得し status をskip として list\[`CheckResult`] オブジェクトを作成する。
+13. list\[`CheckResult`] をJSON に変形し missing_user とする。
+14. UUIDv7 の履歴 ID を作成する。
+15. 履歴 ID, ファイル ID, operator, ValidateSummary と missing_user をupload_history テーブルに保存する。
+16. 履歴 ID を戻り値として返す。
+
+## read_file
+ファイルを読み込みユーザーデータとして扱いやすいように変換する
+
+#### 依存するライブラリ
+- **openpyxl**: Excelファイルを読み込むために必要
+
+#### シグネチャ
+```python[bulk.py]
+def read_file(temporary_id:str) -> list[UserDetail]:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------ | --------- | ------------------------------------ |
+| temporary_id | uuid.UUID | 仮アップロードされたファイルの識別子 |
+
+#### 戻り値
+| 型 | 説明 |
+| ----------------- | -------------------------- |
+| list\[UserDetail] | ファイル内のユーザーデータ |
+
+#### 処理内容
+1. temporary_id をもとに DB から file_path を取得する。
+2. file_path からファイルを取得する。
+3. ファイルが存在しない場合, ResourceNotFound を送出する。
+4. 形式が csv,tsv,excel と異なる場合は ResourceInvalid を送出する。
+5. ファイルのすべての行に対し以下を繰り返す。
+ - ファイルを一行読み込む。
+ - `user_id` のキーが存在するか確認する。
+ - 存在しなければ `user_id` をキーに辞書型でファイル内容を UserDetail 形式で保存する。
+ - 存在すればグループ ID を追加する。
+6. UserDetail のリストを取り出し戻り値として返す。
+
+## get_validate_result
+upload_history テーブルから結果を取得する
+
+#### シグネチャ
+```python[bulk.py]
+def get_validate_result(history_id:uuid.UUID) -> ValidateSummary:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ---------- | --------- | ------- |
+| history_id | uuid.UUID | 履歴 ID |
+
+#### 戻り値
+| 型 | 説明 |
+| --------------- | -------- |
+| ValidateSummary | 検証結果 |
+
+#### 処理内容
+1. upload_history テーブルと files テーブルを結合し id がhistory_id と一致するデータを取得する。
+2. 取得したデータから ValidateSummary を作成して返却する。
+
+## update_users
+- アップロードを実行する
+- celery のtask で実行する
+
+#### デコレータ
+- `@shared_task` : アプリケーションインスタンスに依存せずタスク定義を行うために用いる
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------- | ---------- | -------------------------------------------------------------- |
+| task_id | str | バリデーションタスクの ID |
+| repository_id | str | 選択されたリポジトリの ID |
+| temporary_id | uuid.UUID | 仮アップロードされたファイルの識別子 |
+| delete_users | list\[str] | 削除 (リポジトリ内のグループから除外 )するユーザーの ID リスト |
+
+#### 戻り値
+| 型 | 説明 |
+| --------- | ------- |
+| uuid.UUID | 履歴 ID |
+
+#### 処理内容
+1. services.bulk::build_bulk_operations() を実行する。
+2. [`save_file`](#save_file) でファイルを保存する。
+3. UUIDv7 の履歴 ID を作成する。
+4. 履歴 ID とファイル ID ,operator,timestamp,public=True,status="p" でupload_history テーブルに保存する。
+5. Bulk オブジェクトをリクエストボディとして [`client.bulk::post`](../06.clients/06.bulk.md#post) を呼び出す。
+6. レスポンスを解析しエラーがあれば list\[CheckResult] のstatus をerror に変更し upload_history テーブルの result に保存する。
+7. 履歴 ID を戻り値として返す。
+
+## get_upload_result
+upload_history テーブルから結果を取得する
+
+#### シグネチャ
+```python[bulk.py]
+def get_result(history_id:uuid.UUID) -> ResultSummary:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ---------- | --------- | -------------- |
+| history_id | uuid.UUID | 履歴 ID |
+| filter | list[str] | フィルター項目 |
+| size | int | ページサイズ |
+| offset | int | オフセット |
+
+#### 戻り値
+| 型 | 説明 |
+| ------------- | ---------------- |
+| ResultSummary | アップロード結果 |
+
+#### 処理内容
+1.history_id のデータのうち `results` カラムの中の `status` が filter に含まれるすものを size,offset の範囲で取得する。
+1. files_id を id にもつ files テーブルからファイル情報を取得する。
+2. 取得したデータから ResultSummary を作成して戻り値として返す。
+
+## delete_temporary_file
+一時アップロードされたファイルを削除する
+
+#### デコレータ
+- `@shared_task` : アプリケーションインスタンスに依存せずタスク定義を行うために用いる
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------ | --------- | ---------------------------------- |
+| temporary_id | uuid.UUID | アップロードされたファイルの識別子 |
+
+#### 処理内容
+1. temporary_id をもとに files テーブルからファイルパスを取得する。
+2. 該当するファイルが存在するか確認する。
+3. 存在する場合ファイルを削除する。
+4. files テーブルからデータを削除する。
+
+## get_repository_member
+リポジトリに属する group とユーザーの id を取得する
+
+#### シグネチャ
+```python[bulk.py]
+def get_repository_member(repository_id: str) -> RepositoryMember:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------- | --- | ------------------------- |
+| repository_id | str | 選択されたリポジトリの ID |
+
+#### 戻り値
+| 名前 | 型 | 説明 |
+| ----------------------------------- | ---------------- | ---------------------------------------------------------- |
+| - | RepositoryMember | リポジトリに属するグループとユーザーを返却するためのクラス |
+| ⤷ group_ids | set\[str] | リポジトリに属する group のid |
+| ⤷ user_ids | set\[str] | リポジトリに属する user のid |
+
+- 戻り値の型 `RepositoryMember` は `NamedTuple` で定義され、 group_ids および user_ids 属性を持つオブジェクトを戻り値として返す。
+
+#### エラー
+| 型 | 説明 |
+| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
+| [OAuthTokenError](../02.foundation/exc.md#oauthtokenerror) | アクセストークンが無効または期限切れまたは DB に存在しない場合 |
+| [CredentialsError](../02.foundation/exc.md#credentialserror) | クライアントシークレットが DB に存在しない場合 |
+| [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) | m AP Core API のレスポンスが [MapError](../03.entities/06.map-error.md) の場合 |
+| [UnexpectedResponseError](../02.foundation/exc.md#unexpectedresponseerror) | m AP Core API のサーバーエラー等の予期せぬエラーが発生した場合 |
+
+#### 処理内容
+1. [`token:get_access_token`](../05.services/02.token.md#get_access_token) でアクセストークンを取得する。
+2. [`token:get_client_secret`](../05.services/02.token.md#get_client_secret) でクライアントシークレットを取得する。
+3. 認証情報取得時に [`OAuthTokenError`](../02.foundation/exc.md#oauthtokenerror),[`CredentialsError`](../02.foundation/exc.md#credentialserror) が発生した場合はそのまま送出する。
+4. client.groups::search() でrepository_id に紐づくグループのリストを取得する。
+5. レスポンスが [MapError](../03.entities/06.map-error.md) の場合 [ResourceInvalid](../02.foundation/exc.md#resourceinvalid) を送出する。
+6. m AP Core API のサーバーエラー等が発生した場合 [`UnexpectedResponseError`](../02.foundation/exc.md#unexpectedresponseerror) を送出する。
+7. グループ ID のリストと members から MemberUser のID のリストを作成する。
+8. RepositoryMember オブジェクトを作成する。
+9. RepositoryMember を戻り値として返す。
diff --git a/docs/content/01.detailed/05.services/09.utils.md b/docs/content/01.detailed/05.services/09.utils.md
new file mode 100644
index 00000000..8b0b5a6d
--- /dev/null
+++ b/docs/content/01.detailed/05.services/09.utils.md
@@ -0,0 +1,210 @@
+---
+title: services.utils
+description: 当システムのビジネスロジックで共通に使用されるユーティリティ関数を提供する。
+---
+
+## detect_affiliations
+グループ ID のリストを解析し、グループとロールグループに振り分ける。
+
+
+## detect_affiliation
+グループ ID を解析し、グループかロールグループに分類する。
+
+
+## detect_repository
+
+
+## session_required
+
+
+## search_repositories_options
+
+
+## search_groups_options
+
+
+## search_users_options
+
+
+## search_history_filter_options
+
+
+## build_patch_operations
+
+
+## build_update_member_operations
+グループメンバーの追加 /除外のための PatchOperation を作成する
+
+#### シグネチャ
+```python[utils.py]
+def build_update_member_operations(add:set[str], remove:set[str]) -> list[PatchOperation]:
+```
+#### 引数
+| 名前 | 型 | 説明 |
+| ------ | --------- | --------------------- |
+| add | set\[str] | 追加するユーザーの ID |
+| remove | set\[str] | 除外するユーザーの ID |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------- | ---------------------------------- |
+| list\[PatchOperation] | パッチリクエストのリクエストボディ |
+
+#### 処理内容
+1. add から ID を取り出し path="members", value={"type": "User", "value": id} でAddOperation を作成
+2. remove から ID を取り出し path="members[type eq "User" and value eq {id}]" でRemoveOperation を作成
+3. list[PatchOperation] にまとめて返却
+
+
+## extract_group_ids
+isMemberOf 属性からグループ ID を取り出す
+
+#### シグネチャ
+```python[permissions.py]
+def extract_group_ids(is_member_of: str) -> list[str]:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------ | --- | --------------- |
+| is_member_of | str | isMemberOf 属性 |
+
+#### 戻り値
+| 型 | 説明 |
+| --------- | ------------------------ |
+| list[str] | 所属グループの ID リスト |
+
+#### 処理内容
+1. is_member_of を「 /gr/...; 」または「 /gr/.../ 」の中身を取り出す
+2. グループ id のリストに変換し返却する
+
+
+## is_current_user_system_admin
+ログインユーザーがシステム管理者であるかを判定する
+
+#### シグネチャ
+```python[permissions.py]
+def is_current_user_system_admin() -> bool:
+```
+
+#### 戻り値
+| 型 | 説明 |
+| ---- | ---------------------------------------- |
+| bool | ログインユーザーがシステム管理者かどうか |
+
+#### 処理内容
+1. `current_user.is_meber_of` からログインユーザーの is_member_of 属性を取得する
+2. [`extract_group_ids`](#extract_group_ids) でグループ ID を取得
+3. group_ids に`GROUPS.id_patterns.system_admin` が含まれていれば true を返却
+4. 含まれていなければ false を返却
+
+
+## get_permitted_repository_ids
+ログインユーザーの権限を持つリポジトリ ID を取得する
+
+#### シグネチャ
+```python[permissions.py]
+def get_permitted_repository_ids() -> set[str]:
+```
+
+#### 戻り値
+| 型 | 説明 |
+| --------- | ---------------------- |
+| set\[str] | 権限を持つリポジトリID |
+
+#### 処理内容
+1. `current_user.is_meber_of` からログインユーザーの is_member_of 属性を取得する
+2. [`extract_group_ids`](#extract_group_ids) を呼び出しグループ ID の set に変換する
+3. `detect_affiliations` を呼び出し所属するロールグループを取得する
+4. 取得したロールグループのうちリポジトリ管理者ロールのリポジトリ ID を set に変換し戻り値として返す
+
+
+## filter_permitted_group_ids
+グループ ID がログインユーザーの権限範囲に含まれているかを判定する
+
+#### シグネチャ
+```python[permissions.py]
+def filter_permitted_group_ids(*group_id: str) -> set[str]:
+```
+
+#### 引数
+| 名前 | 型 | 説明 |
+| --------- | --- | ------------------------ |
+| *group_id | str | グループ ID (可変長引数) |
+
+#### 戻り値
+| 型 | 説明 |
+| --------- | -------------------- |
+| set\[str] | 権限を持つグループID |
+
+#### 処理内容
+1. `get_permitted_repository_ids` を呼び出し、権限を持つリポジトリ ID を取得する
+2. `group_id` を引数に `services.utils.affiliations:detect_affiliations` を用いて Affiliation を取得
+3. Affiliation.groups のうち 権限を持つリポジトリ ID を持つグループを set に変換し 返却する
+
+
+## get_current_user_affiliations
+
+
+## resolve_repository_id
+
+
+## resolve_service_id
+
+
+## GroupsCriteria
+
+
+## RepositoriesCriteria
+
+
+## UsersCriteria
+
+
+## build_search_query
+
+
+## make_criteria_object
+
+
+
+## prepare_service
+
+
+## prepare_role_groups
+
+
+## validate_repository_to_map_service
+
+
+## make_map_service
+
+
+## make_repository_detail
+
+
+
+
+## prepare_group
+
+
+## validate_group_to_map_group
+
+
+## make_map_group
+
+
+## make_group_detail
+
+
+## prepare_user
+
+
+## validate_user_to_map_user
+
+
+## make_map_user
+
+
+## make_user_detail
diff --git a/docs/content/01.detailed/06.clients/.navigation.yml b/docs/content/01.detailed/06.clients/.navigation.yml
new file mode 100644
index 00000000..c9284395
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/.navigation.yml
@@ -0,0 +1 @@
+title: 外部 API アクセス
diff --git a/docs/content/01.detailed/06.clients/01.auth.md b/docs/content/01.detailed/06.clients/01.auth.md
new file mode 100644
index 00000000..ce7e3344
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/01.auth.md
@@ -0,0 +1,223 @@
+---
+title: clients.auth
+description: mAP Core Authorization Server の認証を行うクライアント機能を提供する。
+---
+
+## issue_client_credentials
+SP のクライアント認証情報を mAP Core Authorization Server から発行・取得する機能を提供する。
+エンドポイントは定数 [`MAP_OAUTH_ISSUE_ENDPOINT`](../02.foundation/const.md#map_oauth_issue_endpoint) を参照する。
+
+#### 対応エンドポイント
+**POST** /oauth/sslauth/issue.php
+
+
+#### シグネチャ
+```python[auth.py]
+def issue_client_credentials(entity_id: str, certs: SpCerts) -> ClientCredentials:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用する。
+- **flask**: リダイレクト URL の生成に使用する。
+- **pydantic**: レスポンスのバリデーションおよびデシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ----------------------------- | ------- | --------------------------- |
+| entity_id | str | SP エンティティ ID |
+| certs | SpCerts | SP の証明書情報オブジェクト |
+| ⤷ crt | str | SP 証明書のファイルパス |
+| ⤷ key | str | SP 秘密鍵のファイルパス |
+
+- 第二引数 `certs` の型は `Protocol` で定義され、 `crt` および `key` 属性を持つオブジェクトを受け取る。
+ これに合致するオブジェクトとして、 [`SP`](../02.foundation/config.md#spconfig) がある。
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---------------------------------------------------------------- | -------------------- |
+| [ClientCredentials](../03.entities/01.auth.md#clientcredentials) | クライアント認証情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ------------------------------------ | ----------------------------------------------- |
+| requests.exceptions.RequestException | HTTP リクエストに失敗した場合。 |
+| requests.exceptions.HTTPError | レスポンスのステータスコードが 200 以外の場合。 |
+
+#### 処理内容
+1. リダイレクト URL を生成する。エンドポイント [`api.callback:auth_code`](../04.api/03.callback.md#auth_code)
+ に対応するスキーマとホスト名を含む完全な URL を `flask.url_for` を使用して取得する。
+2. mAP Core Authorization Server に対してリクエストを送信する。
+ - エンドポイント [`MAP_OAUTH_ISSUE_ENDPOINT`](../02.foundation/const.md#map_oauth_issue_endpoint) に対して、 POST リクエストを送信する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------ | ------------------------- |
+ | entityid | 引数 `entity_id` |
+ | redirect_uri | ステップ 1 で生成した URL |
+ - クライアント証明書として、引数 `certs` の `crt` および `key` で指定されたファイルを使用する。
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+3. レスポンスのステータスコードが 200 以外の場合は `requests.exceptions.HTTPError` を送出する。
+4. レスポンスボディを [`ClientCredentials`](../03.entities/01.auth.md#clientcredentials) モデルにデシリアライズして戻り値として返す。
+
+
+## issue_oauth_token
+認可コードを使用して SP のアクセストークンを mAP Core Authorization Server から発行・取得する機能を提供する。
+エンドポイントは定数 [`MAP_OAUTH_TOKEN_ENDPOINT`](../02.foundation/const.md#map_oauth_token_endpoint) を参照する。
+
+#### 対応エンドポイント
+**POST** /oauth/token.php
+
+#### シグネチャ
+```python[auth.py]
+def issue_oauth_token(code: str, credentials: ClientCreds) -> OAuthToken:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用する。
+- **flask**: リダイレクト URL の生成に使用する。
+- **pydantic**: レスポンスのバリデーションおよびデシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| --------------------------------------- | ----------- | -------------------------------- |
+| code | str | 認可コード |
+| credentials | ClientCreds | クライアント認証情報オブジェクト |
+| ⤷ client_id | str | クライアント ID |
+| ⤷ client_secret | str | クライアントシークレット |
+
+- 第二引数 `credentials` の型は `Protocol` で定義され、 `client_id` および `client_secret` 属性を持つオブジェクトを受け取る。
+ これに合致するオブジェクトとして、 [`ClientCredentials`](../03.entities/01.auth.md#clientcredentials) がある。
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------- | ------------------------------ |
+| [OAuthToken](../03.entities/01.auth.md#oauthtoken) | 発行されたアクセストークン情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ------------------------------------ | ----------------------------------------------- |
+| requests.exceptions.RequestException | HTTP リクエストに失敗した場合。 |
+| requests.exceptions.HTTPError | レスポンスのステータスコードが 200 以外の場合。 |
+
+#### 処理内容
+1. リダイレクト URL を生成する。エンドポイント [`api.callback:auth_code`](../04.api/03.callback.md#auth_code)
+ に対応するスキーマとホスト名を含む完全な URL を `flask.url_for` を使用して取得する。
+2. mAP Core Authorization Server に対してリクエストを送信する。
+ - エンドポイント [`MAP_OAUTH_TOKEN_ENDPOINT`](../02.foundation/const.md#map_oauth_token_endpoint) に対して、 POST リクエストを送信する。
+ - リクエストボディに以下のフォームデータを含める。
+ | 名前 | 値 |
+ | ------------ | ------------------------- |
+ | grant_type | `"authorization_code"` |
+ | code | 引数 `code` |
+ | redirect_uri | ステップ 1 で生成した URL |
+ - ベーシック認証ヘッダに、引数 `credentials` の `client_id` および `client_secret` を使用する。
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+3. レスポンスのステータスコードが 200 以外の場合は `requests.exceptions.HTTPError` を送出する。
+4. レスポンスボディを [`OAuthToken`](../03.entities/01.auth.md#oauthtoken) モデルにデシリアライズして戻り値として返す。
+
+
+## check_token_validity
+アクセストークンの有効性を mAP Core Authorization Server に問い合わせる機能を提供する。
+エンドポイントは定数 [`MAP_OAUTH_CHECK_ENDPOINT`](../02.foundation/const.md#map_oauth_check_endpoint) を参照する。
+
+#### 対応エンドポイント
+**POST** /oauth/check.php
+
+#### シグネチャ
+```python[auth.py]
+def check_token_validity(access_token: str) -> bool:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用する。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------ | --- | ---------------- |
+| access_token | str | アクセストークン |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ---- | ---------------------------------------------------------------------------------------------- |
+| bool | アクセストークンが有効であれば `True`{lang=python}、無効であれば `False`{lang=python} を返す。 |
+
+#### エラー
+
+| 型 | 説明 |
+| ------------------------------------ | ----------------------------------------------- |
+| requests.exceptions.RequestException | HTTP リクエストに失敗した場合。 |
+| requests.exceptions.HTTPError | レスポンスのステータスコードが 400 以外の場合。 |
+
+#### 処理内容
+1. mAP Core Authorization Server に対してリクエストを送信する。
+ - エンドポイント [`MAP_OAUTH_CHECK_ENDPOINT`](../02.foundation/const.md#map_oauth_check_endpoint) に対して、 POST リクエストを送信する。
+ - リクエストボディに以下のフォームデータを含める。
+ | 名前 | 値 |
+ | ----- | ------------------- |
+ | token | 引数 `access_token` |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+2. レスポンスのステータスコードが 401 の場合は、アクセストークンが無効であると判断し、`False`{lang=python} を返す。
+3. レスポンスのステータスコードが 400 以外の場合は `requests.exceptions.HTTPError` を送出する。
+4. レスポンスのステータスコードが 200 の場合は、アクセストークンが有効であると判断し、`True`{lang=python} を返す。
+
+
+## refresh_oauth_token
+リフレッシュトークンを使用して SP のアクセストークンを mAP Core Authorization Server から更新・取得する機能を提供する。
+エンドポイントは定数 [`MAP_OAUTH_TOKEN_ENDPOINT`](../02.foundation/const.md#map_oauth_token_endpoint) を参照する。
+
+#### 対応エンドポイント
+**POST** /oauth/resource.php
+
+#### シグネチャ
+```python[auth.py]
+def refresh_oauth_token(refresh_token: str, credentials: ClientCreds) -> OAuthToken:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用する。
+- **pydantic**: レスポンスのバリデーションおよびデシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| --------------------------------------- | ----------- | -------------------------------- |
+| refresh_token | str | リフレッシュトークン |
+| credentials | ClientCreds | クライアント認証情報オブジェクト |
+| ⤷ client_id | str | クライアント ID |
+| ⤷ client_secret | str | クライアントシークレット |
+
+- 第二引数 `credentials` の型は `Protocol` で定義され、 `client_id` および `client_secret` 属性を持つオブジェクトを受け取る。
+ これに合致するオブジェクトとして、 [`ClientCredentials`](../03.entities/01.auth.md#clientcredentials) がある。
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------- | ------------------------------ |
+| [OAuthToken](../03.entities/01.auth.md#oauthtoken) | 発行されたアクセストークン情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ------------------------------------ | ----------------------------------------------- |
+| requests.exceptions.RequestException | HTTP リクエストに失敗した場合。 |
+| requests.exceptions.HTTPError | レスポンスのステータスコードが 200 以外の場合。 |
+
+#### 処理内容
+1. mAP Core Authorization Server に対してリクエストを送信する。
+ - エンドポイント [`MAP_OAUTH_TOKEN_ENDPOINT`](../02.foundation/const.md#map_oauth_token_endpoint) に対して、 POST リクエストを送信する。
+ - リクエストボディに以下のフォームデータを含める。
+ | 名前 | 値 |
+ | ------------- | -------------------- |
+ | grant_type | `"refresh_token"` |
+ | refresh_token | 引数 `refresh_token` |
+ - ベーシック認証ヘッダに、引数 `credentials` の `client_id` および `client_secret` を使用する。
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+2. レスポンスのステータスコードが 200 以外の場合は `requests.exceptions.HTTPError` を送出する。
+3. レスポンスボディを [`OAuthToken`](../03.entities/01.auth.md#oauthtoken) モデルにデシリアライズして戻り値として返す。
diff --git a/docs/content/01.detailed/06.clients/02.repositories.md b/docs/content/01.detailed/06.clients/02.repositories.md
new file mode 100644
index 00000000..f5074609
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/02.repositories.md
@@ -0,0 +1,455 @@
+---
+title: clients.repositories
+description: mAP Core API V2 の サービスリソース API を操作するクライアント機能を提供する。
+---
+
+## search
+サービス( SP コネクタ)の検索条件のもとに mAP Core API V2 からサービスリソースを検索する機能を提供する。
+エンドポイントは定数 [`MAP_SERVICES_ENDPOINT`](../02.foundation/const.md#map_services_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**GET** /api/v2/Services
+
+#### シグネチャ
+```python[repositories.py]
+@cache_resource
+def search(
+ query: SearchRequestParameter, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> SearchResponse[MapService] | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### デコレータ
+- [`@cache_resource`{lang=python}](./08.decoraters.md#cache_resource): 検索結果のキャッシュを有効にする。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ------------------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------- |
+| query | [SearchRequestParameter](../03.entities/07.search-request.md#searchrequestparameter) | | 検索条件を保持するインスタンス |
+| include | set\[str] | `None`{lang=python} | 取得するフィールドのセット。 未指定の場合はすべて取得 |
+| exclude | set\[str] | `None`{lang=python} | 除外するフィールドのセット。 未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------- | -------------------------------------------------------- |
+| [SearchResponse](../03.entities/07.search-request.md#searchresponse) | 検索されたサービスリソースのリストを保持するインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | サービスリソースの検索に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_SERVICES_ENDPOINT`](../02.foundation/const.md#map_services_endpoint) に対して、 GET リクエストを送信する。
+ - クエリパラメータに以下を含める。
+ | 名前 | 値 |
+ | ---------------------- | ----------------------------------------------------- |
+ | timestamp | タイムスタンプ |
+ | signature | 署名 |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ | \[string: keyof query] | query のフィールドに対応する値 |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`SearchResponse`](../03.entities/07.search-request.md#searchresponse) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたリポジトリ検索結果、あるいはエラー情報を戻り値として返す。
+
+
+## get_by_id
+サービス ID に基づいて mAP Core API V2 からサービスリソースを取得する機能を提供する。
+エンドポイントは定数 [`MAP_SERVICE_DETAIL_ENDPOINT`](../02.foundation/const.md#map_service_detail_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**GET** /api/v2/Services/{id}
+
+#### シグネチャ
+```python[repositories.py]
+@cache_resource
+def get_by_id(
+ service_id: str, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapService | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: レスポンスのバリデーションおよびデシリアライズに使用。
+
+#### デコレータ
+- [`@cache_resource`{lang=python}](./08.decoraters.md#cache_resource): サービスリソースのキャッシュを有効にする。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | --------- | ------------------- | ---------------------------------------------------------- |
+| service_id | str | | サービス ID |
+| include | set\[str] | `None`{lang=python} | 取得するフィールドのセット。 未指定の場合はすべて取得 |
+| exclude | set\[str] | `None`{lang=python} | 除外するフィールドのセット。 未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----------------------------------------------------- | -------------------------------------------------- |
+| [MapService](../03.entities/03.map-service.md#mapservice) | サービスリソースが正常に取得された場合 |
+| [MapError](../03.entities/06.map-error.md#maperror) | サービスリソースが取得されなかった場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_SERVICE_ENDPOINT`](../02.foundation/const.md#map_service_endpoint) に対して、 GET リクエストを送信する。
+ - パスパラメータとして末尾に `/{service_id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | timestamp | タイムスタンプ |
+ | signature | 署名 |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapService`](../03.entities/03.map-service.md#mapservice) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたサービスリソース、あるいはエラー情報を戻り値として返す。
+
+
+## post
+mAP Core API に対してサービスリソースを作成する機能を提供する。
+エンドポイントは定数 [`MAP_SERVICES_ENDPOINT`](../02.foundation/const.md#map_services_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**POST** /api/v2/Services
+
+#### シグネチャ
+```python[repositories.py]
+def post(
+ service: MapService, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapService | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ----------------------------------------------------- | ------------------- | ---------------------------------------------------------- |
+| service | [MapService](../03.entities/03.map-service.md#mapservice) | | 作成するサービスリソースを保持するインスタンス |
+| include | set\[str] | `None`{lang=python} | 取得するフィールドのセット。 未指定の場合はすべて取得 |
+| exclude | set\[str] | `None`{lang=python} | 除外するフィールドのセット。 未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----------------------------------------------------- | ------------------------------------------------ |
+| [MapService](../03.entities/03.map-service.md#mapservice) | 作成されたサービスリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | サービスリソースの作成に失敗した場合のエラー情報 |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_SERVICES_ENDPOINT`](../02.foundation/const.md#map_services_endpoint) に対して、 POST リクエストを送信する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、引数 `service` をシリアライズし、以下のフィールドを追加した JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | -------------------- |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapService`](../03.entities/03.map-service.md#mapservice) のインスタンスにデシリアライズする。
+ - ステータスコードが 400、409 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされた作成されたサービスリソース、あるいはエラー情報を戻り値として返す。
+
+
+## put_by_id
+サービス ID に基づいて mAP Core API V2 のサービスリソースを更新する機能を提供する。
+エンドポイントは定数 [`MAP_SERVICE_ENDPOINT`](../02.foundation/const.md#map_service_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**PUT** /api/v2/Services/{id}
+
+#### シグネチャ
+```python[repositories.py]
+def put_by_id(
+ service: MapService, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapService | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | --------------------------------------------------------- | ------------------- | ---------------------------------------------------------- |
+| service | [MapService](../03.entities/03.map-service.md#mapservice) | | 更新するサービスリソースを保持するインスタンス |
+| include | set\[str] | `None`{lang=python} | 取得するフィールドのセット。 未指定の場合はすべて取得 |
+| exclude | set\[str] | `None`{lang=python} | 除外するフィールドのセット。 未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----------------------------------------------------- | ------------------------------------------------ |
+| [MapService](../03.entities/03.map-service.md#mapservice) | 更新されたサービスリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | サービスリソースの更新に失敗した場合のエラー情報 |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_SERVICE_ENDPOINT`](../02.foundation/const.md#map_service_endpoint) に対して、 PUT リクエストを送信する。
+ - パスパラメータとして末尾に `/{service.id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、引数 `service` をシリアライズし、以下のフィールドを追加した JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | -------------------- |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapService`](../03.entities/03.map-service.md#mapservice) のインスタンスにデシリアライズする。
+ - ステータスコードが 400、409 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされた更新されたサービスリソース、あるいはエラー情報を戻り値として返す。
+
+## patch_by_id
+サービス ID に基づいて mAP Core API V2 のサービスリソースを部分更新する機能を提供する。
+エンドポイントは定数 [`MAP_SERVICE_ENDPOINT`](../02.foundation/const.md#map_service_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**PATCH** /api/v2/Services/{id}
+
+#### シグネチャ
+```python[repositories.py]
+def patch_by_id(
+ service_id: str, operations: list[PatchOperation]
+ /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str
+) -> MapService | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | -------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------- |
+| service_id | str | | サービス ID |
+| operations | list\[[PatchOperation](../03.entities/08.patch-request.md#patchoperation)] | | 更新操作のリストを保持するインスタンス |
+| include | set\[str] | `None`{lang=python} | 取得するフィールドのセット。 未指定の場合はすべて取得 |
+| exclude | set\[str] | `None`{lang=python} | 除外するフィールドのセット。 未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| ----------------------------------------------------- | ------------------------------------------------ |
+| [MapService](../03.entities/03.map-service.md#mapservice) | 更新されたサービスリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | サービスリソースの更新に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_SERVICE_ENDPOINT`](../02.foundation/const.md#map_service_endpoint) に対して、 PATCH リクエストを送信する。
+ - パスパラメータとして末尾に `/{service_id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、以下のフィールドを含む JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | ---------------------------------------- |
+ | Operations | 引数 `operations` をシリアライズしたもの |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapService`](../03.entities/03.map-service.md#mapservice) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされた更新されたサービスリソース、あるいはエラー情報を戻り値として返す。
+
+
+## delete_by_id
+リソース ID に基づいて mAP Core API V2 のサービスリソースを削除する機能を提供する。
+エンドポイントは定数 [`MAP_SERVICE_ENDPOINT`](../02.foundation/const.md#map_service_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**DELETE** /api/v2/Services/{id}
+
+#### シグネチャ
+```python[repositories.py]
+def delete_by_id(
+ service_id: str, *, access_token: str, client_secret: str,
+) -> MapError | None:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | --- | ---------------------------------------------------------- |
+| service_id | str | サービス ID |
+| access_token | str | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapError](../03.entities/06.map-error.md#maperror) | サービスリソースの削除に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_SERVICE_ENDPOINT`](../02.foundation/const.md#map_service_endpoint) に対して、 DELETE リクエストを送信する。
+ - パスパラメータとして末尾に `/{service_id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | --------- | -------------- |
+ | timestamp | タイムスタンプ |
+ | signature | 署名 |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+4. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 204 の場合、`None` を戻り値として返す。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズし、戻り値として返す。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+5. デシリアライズされたエラー情報を戻り値として返す。
+
+## handle_repository_updated
+
+## handle_repository_updated_by_id
+
+## handle_reset_search_cache
diff --git a/docs/content/01.detailed/06.clients/03.groups.md b/docs/content/01.detailed/06.clients/03.groups.md
new file mode 100644
index 00000000..36035111
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/03.groups.md
@@ -0,0 +1,454 @@
+---
+title: clients.groups
+description: mAP Core API V2 の Group Resource API を操作するクライアント機能を提供する。
+---
+
+## search
+グループの検索条件をもとに mAP Core API からグループリソースを検索する機能を提供する。
+エンドポイントは定数 [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) を参照する。
+
+#### 対応エンドポイント
+**GET** /api/v2/Groups
+
+#### シグネチャ
+```python[groups.py]
+@cache_resource
+def search(
+ query: SearchRequestParameter, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> SearchResponse[MapGroup] | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### デコレータ
+- [`@cache_resource`{lang=python}](./08.decoraters.md#cache_resource): 検索結果のキャッシュを有効にする。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ------------------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------- |
+| query | [SearchRequestParameter](../03.entities/07.search-request.md#searchrequestparameter) | | 検索条件を保持するインスタンス |
+| include | set\[str] | `None`{lang=python} | 取得するフィールドのセット。未指定の場合はすべて取得 |
+| exclude | set\[str] | `None`{lang=python} | 除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------- | -------------------------------------------------------- |
+| [SearchResponse](../03.entities/07.search-request.md#searchresponse) | 検索されたグループリソースのリストを保持するインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | グループリソースの検索に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) に対して、 GET リクエストを送信する。
+ - クエリパラメータに以下を含める。
+ | 名前 | 値 |
+ | ---------------------- | ----------------------------------------------------- |
+ | timestamp | タイムスタンプ |
+ | signature | 署名 |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ | \[string: keyof query] | query のフィールドに対応する値 |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`SearchResponse`](../03.entities/07.search-request.md#searchresponse) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+
+
+## get_by_id
+グループ ID に基づいて mAP Core API からグループリソースを取得する機能を提供する。
+エンドポイントは定数 [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**GET** /api/v2/Groups/{id}
+
+#### シグネチャ
+```python[groups.py]
+@cache_resource
+def get_by_id(
+ group_id: str, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapGroup | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: レスポンスのバリデーションおよびデシリアライズに使用。
+
+#### デコレータ
+- [`@cache_resource`{lang=python}](./08.decoraters.md#cache_resource): グループリソースのキャッシュを有効にする。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ---------- | ------------------- | ---------------------------------------------------------- |
+| group_id | str | | グループ ID |
+| include | set\[str\] | `None`{lang=python} | 取得するフィールドのセット。未指定の場合はすべて取得 |
+| exclude | set\[str\] | `None`{lang=python} | 除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | -------------------------------------------------- |
+| [MapGroup](../03.entities/04.map-group.md#mapgroup) | 取得されたグループリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | グループリソースが取得されなかった場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) に対して、 GET リクエストを送信する。
+ - パスパラメータとして末尾に `/{group_id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | time_stamp | タイムスタンプ |
+ | signature | 署名 |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapGroup`](../03.entities/04.map-group.md#mapgroup) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたグループリソース、あるいはエラー情報を戻り値として返す。
+
+
+## post
+mAP Core API に対してグループリソースを作成する機能を提供する。
+エンドポイントは定数 [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**POST** /api/v2/Groups
+
+#### シグネチャ
+```python[groups.py]
+def post(
+ group: MapGroup, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapGroup | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | --------------------------------------------------- | ------------------- | ------------------------------------------------------------ |
+| group | [MapGroup](../03.entities/04.map-group.md#mapgroup) | | 登録するグループリソース |
+| include | set\[str\] | `None`{lang=python} | 登録するフィールドのセット。未指定の場合はすべて登録 |
+| exclude | set\[str\] | `None`{lang=python} | 登録から除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapGroup](../03.entities/04.map-group.md#mapgroup) | 作成されたグループリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | グループリソースの作成に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) に対して、 POST リクエストを送信する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、引数 `group` をシリアライズし、以下のフィールドを追加した JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | -------------------- |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 201 の場合、レスポンスボディを [`MapGroup`](../03.entities/04.map-group.md#mapgroup) のインスタンスにデシリアライズする。
+ - ステータスコードが 400、409 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたグループリソース、あるいはエラー情報を戻り値として返す。
+
+
+## put_by_id
+グループ ID に基づいて mAP Core API 上のグループリソースを更新する機能を提供する。
+エンドポイントは定数 [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**PUT** /api/v2/Groups/{id}
+
+#### シグネチャ
+```python[groups.py]
+def put_by_id(
+ group: MapGroup, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapGroup | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | --------------------------------------------------- | ------------------- | ------------------------------------------------------------ |
+| group | [MapGroup](../03.entities/04.map-group.md#mapgroup) | | 更新するグループリソース |
+| include | set\[str\] | `None`{lang=python} | 更新するフィールドのセット。未指定の場合はすべて更新 |
+| exclude | set\[str\] | `None`{lang=python} | 更新から除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapGroup](../03.entities/04.map-group.md#mapgroup) | 更新されたグループリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | グループリソースの更新に失敗した場合のエラー情報 |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) に対して、 PUT リクエストを送信する。
+ - パスパラメータとして末尾に `/{group.id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、引数 `group` をシリアライズし、以下のフィールドを追加した JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | -------------------- |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを
+ [`MapGroup`](../03.entities/04.map-group.md#mapgroup) のインスタンスにデシリアライズする。
+ - ステータスコードが 400、409 の場合、レスポンスボディを
+ [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたグループリソース、あるいはエラー情報を戻り値として返す。
+
+
+## patch_by_id
+グループ ID に基づいて mAP Core API 上のグループリソースを部分更新する機能を提供する。
+エンドポイントは定数 [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**PATCH** /api/v2/Groups/{id}
+
+#### シグネチャ
+```python[groups.py]
+def patch_by_id(
+ group_id: str, operations: list[PatchOperation]
+ /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapGroup | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | -------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------ |
+| group_id | str | | グループ ID |
+| operations | list\[[PatchOperation](../03.entities/08.patch-request.md#patchoperation)] | | 更新操作のリスト |
+| include | set\[str\] | `None`{lang=python} | 更新するフィールドのセット。未指定の場合はすべて更新 |
+| exclude | set\[str\] | `None`{lang=python} | 更新から除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapGroup](../03.entities/04.map-group.md#mapgroup) | 更新されたグループリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | グループリソースの更新に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `operations` をもとに、 [`PatchRequestPayload`](../03.entities/08.patch-request.md#patchrequestpayload) のインスタンスを作成する。
+4. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+5. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) に対して、 PATCH リクエストを送信する。
+ - パスパラメータとして末尾に `/{group_id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、以下のフィールドを含む JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | ---------------------------------------- |
+ | Operations | 引数 `operations` をシリアライズしたもの |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+6. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapGroup`](../03.entities/04.map-group.md#mapgroup) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+7. デシリアライズされたグループリソース、あるいはエラー情報を戻り値として返す。
+
+
+## delete_by_id
+グループ ID に基づいて mAP Core API 上のグループリソースを削除する機能を提供する。
+エンドポイントは定数 [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**DELETE** /api/v2/Groups/{id}
+
+#### シグネチャ
+```python[groups.py]
+def delete_by_id(
+ group_id: str, *, access_token: str, client_secret: str,
+) -> MapError | None:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | --- | ---------------------------------------------------------- |
+| group_id | str | グループ ID |
+| access_token | str | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapError](../03.entities/06.map-error.md#maperror) | グループリソースの削除に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_GROUPS_ENDPOINT`](../02.foundation/const.md#map_groups_endpoint) に対して、 DELETE リクエストを送信する。
+ - パスパラメータとして末尾に `/{group.id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ---------- | -------------- |
+ | time_stamp | タイムスタンプ |
+ | signature | 署名 |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+4. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 204 の場合 `None`{lang=python} を戻り値として返す
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+5. デシリアライズされたエラー情報を戻り値として返す。
+
diff --git a/docs/content/01.detailed/06.clients/04.users.md b/docs/content/01.detailed/06.clients/04.users.md
new file mode 100644
index 00000000..fbff42e7
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/04.users.md
@@ -0,0 +1,470 @@
+---
+title: clients.users
+description: mAP Core API V2 の User Resource API を操作するクライアント機能を提供する。
+---
+
+## search
+ユーザーの検索条件のもとに mAP Core API V2 からユーザーリソースを検索する機能を提供する。
+エンドポイントは定数 [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**GET** /api/v2/Users
+
+#### シグネチャ
+```python[users.py]
+@cache_resource
+def search(
+ query: SearchRequestParameter, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> SearchResponse[MapUser] | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### デコレータ
+- [`@cache_resource`{lang=python}](./08.decoraters.md#cache_resource): 検索結果のキャッシュを有効にする。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ------------------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------- |
+| query | [SearchRequestParameter](../03.entities/07.search-request.md#searchrequestparameter) | | 検索条件を保持するインスタンス |
+| include | set\[str] | `None`{lang=python} | 取得するフィールドのセット。未指定の場合はすべて取得 |
+| exclude | set\[str] | `None`{lang=python} | 除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| -------------------------------------------------------------------- | -------------------------------------------------------- |
+| [SearchResponse](../03.entities/07.search-request.md#searchresponse) | 検索されたユーザーリソースのリストを保持するインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | ユーザーリソースの検索に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) に対して、 GET リクエストを送信する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ---------------------- | ----------------------------------------------------- |
+ | time_stamp | タイムスタンプ |
+ | signature | 署名 |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ | \[string: keyof query] | query のフィールドに対応する値 |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`SearchResponse`](../03.entities/07.search-request.md#searchresponse) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたユーザーリソースのリスト、あるいはエラー情報を戻り値として返す。
+
+
+## get_by_id
+ユーザー ID に基づいて mAP Core API からユーザーリソースを取得する機能を提供する。
+エンドポイントは定数 [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**GET** /api/v2/Users/{id}
+
+#### シグネチャ
+```python[users.py]
+@cache_resource
+def get_by_id(
+ user_id: str, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapUser | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: レスポンスのバリデーションおよびデシリアライズに使用。
+
+#### デコレータ
+- [`@cache_resource`{lang=python}](./08.decoraters.md#cache_resource): ユーザーリソースのキャッシュを有効にする。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ---------- | ------------------- | ---------------------------------------------------------- |
+| user_id | str | | ユーザー ID |
+| include | set\[str\] | `None`{lang=python} | 取得するフィールドのセット。未指定の場合はすべて取得 |
+| exclude | set\[str\] | `None`{lang=python} | 除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | -------------------------------------------------- |
+| [MapUser](../03.entities/05.map-user.md#mapuser) | 取得されたユーザーリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | ユーザーリソースが取得されなかった場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) に対して、 GET リクエストを送信する。
+ - パスパラメータとして末尾に `/{user_id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | time_stamp | タイムスタンプ |
+ | signature | 署名 |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapUser`](../03.entities/05.map-user.md#mapuser) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたユーザーリソース、あるいはエラー情報を戻り値として返す。
+
+
+## get_by_eppn
+EPPN に基づいて mAP Core API からユーザーリソースを取得する機能を提供する。
+エンドポイントは定数 [`MAP_EXIST_EPPN_ENDPOINT`](../02.foundation/const.md#map_exist_eppn_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**GET** /api/v2/Existeppn/{eppn}
+
+#### シグネチャ
+```python[users.py]
+def get_by_eppn(
+ eppn: str, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapUser | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: レスポンスのバリデーションおよびデシリアライズに使用。
+
+#### デコレータ
+- [`@cache_resource`{lang=python}](./08.decoraters.md#cache_resource): ユーザーリソースのキャッシュを有効にする。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ---------- | ------------------- | ---------------------------------------------------------- |
+| eppn | str | | ユーザーの EPPN |
+| include | set\[str\] | `None`{lang=python} | 取得するフィールドのセット。未指定の場合はすべて取得 |
+| exclude | set\[str\] | `None`{lang=python} | 除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | -------------------------------------------------- |
+| [MapUser](../03.entities/05.map-user.md#mapuser) | 取得されたユーザーリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | ユーザーリソースが取得されなかった場合のエラー情報 |
+
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_EXIST_EPPN_ENDPOINT`](../02.foundation/const.md#map_exist_eppn_endpoint) に対して、 GET リクエストを送信する。
+ - パスパラメータとして末尾に `/{eppn}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | time_stamp | タイムスタンプ |
+ | signature | 署名 |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapUser`](../03.entities/05.map-user.md#mapuser) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたユーザーリソース、あるいはエラー情報を戻り値として返す。
+
+
+## post
+mAP Core API に対してユーザーリソースを作成する機能を提供する。
+エンドポイントは定数 [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**POST** /api/v2/Users
+
+#### シグネチャ
+```python[users.py]
+def post(
+ user: MapUser, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapUser | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | ------------------------------------------------ | ------------------- | ------------------------------------------------------------ |
+| user | [MapUser](../03.entities/05.map-user.md#mapuser) | | 登録するユーザーリソース |
+| include | set\[str\] | `None`{lang=python} | 登録するフィールドのセット。未指定の場合はすべて登録 |
+| exclude | set\[str\] | `None`{lang=python} | 登録から除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapUser](../03.entities/05.map-user.md#mapuser) | 作成されたユーザーリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | ユーザーリソースの作成に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) に対して、 POST リクエストを送信する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、引数 `user` をシリアライズし、以下のフィールドを追加した JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | -------------------- |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 201 の場合、レスポンスボディを
+ [`MapUser`](../03.entities/05.map-user.md#mapuser) のインスタンスにデシリアライズする。
+ - ステータスコードが 400、409 の場合、レスポンスボディを
+ [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたユーザーリソース、あるいはエラー情報を戻り値として返す。
+
+
+## put_by_id
+ユーザー ID に基づいて mAP Core API 上のユーザーリソースを更新する機能を提供する。
+エンドポイントは定数 [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**PUT** /api/v2/Users/{id}
+
+#### シグネチャ
+```python[users.py]
+def put_by_id(
+ user: MapUser, /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapUser | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | ------------------------------------------------ | ------------------------------------------------------------ |
+| user | [MapUser](../03.entities/05.map-user.md#mapuser) | 更新するユーザーリソースのインスタンス |
+| include | set\[str\] \| `None`{lang=python} | 更新するフィールドのセット。未指定の場合はすべて更新 |
+| exclude | set\[str\] \| `None`{lang=python} | 更新から除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapUser](../03.entities/05.map-user.md#mapuser) | 更新されたユーザーリソース |
+| [MapError](../03.entities/06.map-error.md#maperror) | ユーザーリソースの更新に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) に対して、 PUT リクエストを送信する。
+ - パスパラメータとして末尾に `/{user.id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、引数 `user` をシリアライズし、以下のフィールドを追加した JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | -------------------- |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapUser`](../03.entities/05.map-user.md#mapuser) のインスタンスにデシリアライズする。
+ - ステータスコードが 400、409 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされたユーザーリソース、あるいはエラー情報を戻り値として返す。
+
+
+## patch_by_id
+ユーザー ID に基づいて mAP Core API 上のユーザーリソースを部分更新する機能を提供する。
+エンドポイントは定数 [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) で定義されている。
+
+#### 対応エンドポイント
+**PATCH** /api/v2/Users/{id}
+
+#### シグネチャ
+```python[users.py]
+def patch_by_id(
+ user_id: str, operations: list[PatchOperation]
+ /, include: set[str] | None = None, exclude: set[str] | None = None,
+ *, access_token: str, client_secret: str,
+) -> MapUser | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+
+| 名前 | 型 | デフォルト | 説明 |
+| ------------- | -------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------ |
+| user_id | str | | ユーザー ID |
+| operations | list\[[PatchOperation](../03.entities/08.patch-request.md#patchoperation)] | | 更新操作のリスト |
+| include | set\[str\] | `None`{lang=python} | 更新するフィールドのセット。未指定の場合はすべて更新 |
+| exclude | set\[str\] | `None`{lang=python} | 更新から除外するフィールドのセット。未指定の場合は除外しない |
+| access_token | str | | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --------------------------------------------------- | ------------------------------------------------ |
+| [MapUser](../03.entities/05.map-user.md#mapuser) | 更新されたユーザーリソースのインスタンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | ユーザーリソースの更新に失敗した場合のエラー情報 |
+
+#### エラー
+
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `operations` をもとに、 [`PatchRequestPayload`](../03.entities/08.patch-request.md#patchrequestpayload) のインスタンスを作成する。
+4. 引数 `include` および `exclude` をもとに、取得するフィールドのパラメータを作成する。
+ - `include` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合する。
+ - `exclude` が `None`{lang=python} でない場合、カンマ区切りの文字列に結合とする。
+ - フィールド名は camelCase に変換して使用する。
+5. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_USERS_ENDPOINT`](../02.foundation/const.md#map_users_endpoint) に対して、 PATCH リクエストを送信する。
+ - パスパラメータとして末尾に `/{user_id}` を付与する。
+ - クエリパラメータとして以下を付与する。
+ | 名前 | 値 |
+ | ------------------ | ----------------------------------------------------- |
+ | attributes | (存在する場合)引数 `include` で指定されたフィールド |
+ | excludedAttributes | (存在する場合)引数 `exclude` で指定されたフィールド |
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、以下のフィールドを含む JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | ---------------------------------------- |
+ | Operations | 引数 `operations` をシリアライズしたもの |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+6. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを [`MapUser`](../03.entities/05.map-user.md#mapuser) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+7. デシリアライズされたユーザーリソース、あるいはエラー情報を戻り値として返す。
diff --git a/docs/content/01.detailed/06.clients/06.bulk.md b/docs/content/01.detailed/06.clients/06.bulk.md
new file mode 100644
index 00000000..d610d491
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/06.bulk.md
@@ -0,0 +1,68 @@
+---
+title: clients.bulk
+description: mAP Core API V2 の Bulk API を操作するクライアント機能を提供する。
+---
+
+## post
+mAP Core API に対して一括リクエスト機能を提供する。
+
+#### 対応エンドポイント
+**POST** [/api/v2/Bulk](../02.foundation/const.md#map_bulk_endpoint)
+
+#### シグネチャ
+```python[groups.py]
+def post(
+ operations: list[BulkOperation]
+ *, access_token: str, client_secret: str
+) -> BulkResponse | MapError:
+```
+
+#### 依存するライブラリ
+- **requests**: HTTP リクエストの送信に使用。
+- **pydantic**: リクエストおよびレスポンスのバリデーションおよびシリアライズ・デシリアライズに使用。
+
+#### 引数
+| 名前 | 型 | 説明 |
+| ------------- | -------------------- | ---------------------------------------------------------- |
+| operations | list\[BulkOperation] | 単一の操作を一括オペレーション形式にしたもののリスト |
+| access_token | str | (キーワード引数) mAP Core API のアクセストークン |
+| client_secret | str | (キーワード引数) mAP Core API のクライアントシークレット |
+
+#### 戻り値
+| 型 | 説明 |
+| -------------------------------------------------------------- | ---------------------------------------- |
+| [BulkResponse](../03.entities/09.bulk-request.md#bulkresponse) | 一括レスポンス |
+| [MapError](../03.entities/06.map-error.md#maperror) | 一括リクエストに失敗した場合のエラー情報 |
+
+#### エラー
+| 型 | 説明 |
+| ----------------------------- | ------------------------------------ |
+| requests.exceptions.HTTPError | 401 以上の HTTP エラーが発生した場合 |
+
+#### 処理内容
+1. [`utils:get_time_stamp`](./06.utils.md#get_time_stamp) を呼び出し、タイムスタンプを取得する。
+2. タイムスタンプ及び、引数 `access_token` 、`client_secret` をもとに
+ [`utils:compute_signature`](./06.utils.md#compute_signature) を呼び出し、署名を生成する。
+3. 引数 `operations` をもとに、 [`BulkRequestPayload`](../03.entities/09.bulk-request.md#bulkrequestpayload) のインスタンスを作成する。
+4. mAP Core API に対してリクエストを送信する。
+ - エンドポイント [`MAP_BULK_ENDPOINT`](../02.foundation/const.md#map_bulk_endpoint) に対して、 POST リクエストを送信する。
+ - リクエストヘッダーに以下を付与する。
+ | 名前 | 値 |
+ | ------------- | --------------------------------------------------------- |
+ | Content-Type | `application/json` ( **requests** により自動設定される) |
+ | Authorization | アクセストークン。 `"Bearer "` の形式で付与 |
+ - リクエストボディに、 `BulkRequestPayload` をシリアライズし、以下のフィールドを追加した JSON を設定する。
+ | 名前 | 値 |
+ | ------------------------------------ | -------------------- |
+ | request | 認証情報オブジェクト |
+ | ⤷ time_stamp | タイムスタンプ |
+ | ⤷ signature | 署名 |
+
+ - サーバー設定値 [`MAP_CORE`](../02.foundation/config.md#mapcoreconfig) の `timeout` に従い、タイムアウトを設定する。
+5. レスポンスを解析し、 HTTP ステータスコードに応じた処理を行う。
+ - ステータスコードが 200 の場合、レスポンスボディを
+ [`BulkResponse`](../03.entities/09.bulk-request.md#bulkresponse) のインスタンスにデシリアライズする。
+ - ステータスコードが 400 の場合、レスポンスボディを
+ [`MapError`](../03.entities/06.map-error.md#maperror) のインスタンスにデシリアライズする。
+ - ステータスコードが 401 以上の場合、 `requests.Response.raise_for_status` を呼び出し 例外 `requests.exceptions.HTTPError` を送出する。
+6. デシリアライズされた一括レスポンス、あるいはエラー情報を戻り値として返す。
diff --git a/docs/content/01.detailed/06.clients/06.utils.md b/docs/content/01.detailed/06.clients/06.utils.md
new file mode 100644
index 00000000..ea0b6dcb
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/06.utils.md
@@ -0,0 +1,49 @@
+---
+title: clients.utils
+description: mAP Core API V2 クライアント機能で共通に使用されるユーティリティ関数を提供する。
+---
+
+## get_time_stamp
+mAP Core API V2 を使用する際に使用するタイムスタンプを取得する。 Unix 時間を秒単位で返す。
+
+#### シグネチャ
+```python[utils.py]
+def get_time_stamp() -> str:
+```
+
+#### 戻り値
+
+| 型 | 説明 |
+| --- | ------------------ |
+| str | 秒単位の Unix 時間 |
+
+#### 処理内容
+1. 現在の UTC 時刻を取得する。
+2. ミリ秒を切り捨てて、その文字列を戻り値として返す。
+
+
+## compute_signature
+mAP Core API V2 を使用する際に必要な署名を計算する。
+
+#### シグネチャ
+```python[utils.py]
+def compute_signature(client_secret: str, access_token: str, time_stamp: str) -> str:
+```
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ------------- | --- | ------------------------ |
+| client_secret | str | クライアントシークレット |
+| access_token | str | アクセストークン |
+| time_stamp | str | タイムスタンプ |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --- | ----------------------- |
+| str | 16 進数表現の署名文字列 |
+
+#### 処理内容
+1. `client_secret` 、`access_token` 、`time_stamp` の順に連結した文字列を作成する。
+2. 連結した文字列の SHA-256 ハッシュを計算し、その 16 進数表現の文字列を戻り値として返す。
diff --git a/docs/content/01.detailed/06.clients/08.decoraters.md b/docs/content/01.detailed/06.clients/08.decoraters.md
new file mode 100644
index 00000000..37bd0357
--- /dev/null
+++ b/docs/content/01.detailed/06.clients/08.decoraters.md
@@ -0,0 +1,96 @@
+---
+title: clients.decoraters
+description: mAP Core API V2 のレスポンスをキャッシュするためのデコレータを提供する。
+---
+
+## cache_resource
+API コントローラのレスポンスをキャッシュするためのデコレータを提供する。
+
+#### シグネチャ
+```python[decoraters.py]
+@overload
+def cache_resource[T: Callable[..., BaseModel]](f: T) -> T: ...
+@overload
+def cache_resource[T: Callable[..., BaseModel]](
+ *,
+ identifier_generator: Callable[..., str] | None = None,
+ timeout: int | None = None,
+) -> Callable[[T], T]: ...
+
+def cache_resource[T: Callable[..., BaseModel]]( # noqa: C901
+ f: T | None = None,
+ *,
+ identifier_generator: Callable[..., str] | None = None,
+ timeout: int | None = None,
+) -> T | Callable:
+```
+
+#### 依存するライブラリ
+- **redis-py**: Redis クライアントライブラリ。データストアへの接続を提供するために使用される。
+- **Flask-Pydantic**: リクエストとレスポンスのバリデーション、シリアライズ・デシリアライズを行う。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| -------------------- | -------- | ------------------------------------------------------------------ |
+| f | T | キャッシュ対象の関数。API クライアントの関数を想定している。 |
+| identifier_generator | Callable | キャッシュの識別子を生成する関数。 |
+| timeout | int | キャッシュの有効期限(秒)。指定しない場合はサーバー設定値に従う。 |
+
+#### 戻り値
+
+| 型 | 説明 |
+| --- | ------------------------------------------------ |
+| T | 関数をキャッシュのために初期化し、そのまま返す。 |
+
+#### 処理内容
+1. デコレータが引数 `f` を受け取った場合、つまり引数なしで使用された場合は、引数 `f` をキャッシュのために初期化し、そのまま返す。
+2. 引数 `f` が `None` の場合、つまり引数ありで使用された場合は、引数 `identifier_generator` と `timeout` を反映した、初期化関数を返す。
+3. 初期化関数は、以下のように引数 `f` に受けとった関数をラッパーする。
+ 1. ラッパー関数は、引数 `f` に受けとった関数の戻り値の型注釈から戻り値の型を取得する。
+ 2. 引数 `timeout` 、あるいはサーバー設定値 [`REDIS.cache_timeout`](../02.foundation/const.md#redis_cache_timeout) をキャッシュの有効期限として使用する。
+ その値が 0 であればそのまま 引数 `f` の関数を実行し、戻り値を返す。
+ 3. 関数の完全インポート名と、引数をもとに `"--"` の形式でキャッシュのキーを生成する。
+ それぞれ、
+ - `key_prefix`: サーバー設定値 [`REDIS.cache_key_prefix`](../02.foundation/const.md#redis_cache_key_prefix)
+ - `import_name`: 引数 `f` の関数の完全インポート名
+ - `identifier`: 引数 `f` の関数に渡された第一引数の値。あるいは引数 `identifier_generator` によって生成された識別子。
+ - `args_hash`: 引数をハッシュ化した値。位置引数はそのまま、キーワード引数はキーと値をソートして連結した文字列をハッシュ化する。
+ 4. キーをもとにデータストアからキャッシュされたレスポンスを取得する。
+ 5. 取得したデータを引数 `f` の関数の戻り値の型にデシリアライズして返す。
+ 6. キャッシュが存在しなかった場合、あるいはデータストアのエラーおよびデシリアライズのエラーが発生した場合は、引数 `f` の関数を実行し、戻り値をキャッシュに保存してから返す。
+ このとき、キャッシュにはステップ 2 の通りの期限を設定する。
+4. ラッパー関数には、引数 `f` の関数の完全インポート名を `_import_name` 属性に設定し、フラグとして用いる。
+
+
+## clear_cache
+API コントローラのキャッシュをクリアするためのデコレータを提供する。
+
+#### シグネチャ
+```python[decoraters.py]
+def clear_cache(func: t.Callable, *identifier: str) -> None:
+```
+
+#### 依存するライブラリ
+- **redis-py**: Redis クライアントライブラリ。データストアへの接続を提供するために使用される。
+
+#### 引数
+
+| 名前 | 型 | 説明 |
+| ---------- | -------- | ------------------------------------------------------------------ |
+| func | Callable | キャッシュをクリアする関数。API クライアントの関数を想定している。 |
+| identifier | str | キャッシュの識別子。キャッシュ作成時に生成された識別子を指定する。 |
+
+#### 処理内容
+1. 引数 `func` の関数から `_import_name` 属性を取得する。取得されなかった場合は、 `NotImplementedError`{lang=python} を発生させる。
+2. 引数 `identifier` ごとに、 `"--*"` の形式でキャッシュの識別子を生成する。
+ それぞれ、
+ - `key_prefix`: サーバー設定値 [`REDIS.cache_key_prefix`](../02.foundation/const.md#redis_cache_key_prefix)
+ - `import_name`: 引数 `func` の関数の完全インポート名
+ - `identifier`: 引数 `identifier`
+ - `*`: ワイルドカード。第二引数以降の値に関わらず、すべてのキャッシュを削除する。
+3. 生成した識別子をもとにデータストアから存在するキーをすべて取得し、削除する。
+ ::warning
+ `KEYS` コマンドはパフォーマンスに影響を与えるため、 `SCAN` コマンドを使用すること。
+ ::
+
diff --git a/docs/content/01.detailed/07.db/.navigation.yml b/docs/content/01.detailed/07.db/.navigation.yml
new file mode 100644
index 00000000..6e6ab19e
--- /dev/null
+++ b/docs/content/01.detailed/07.db/.navigation.yml
@@ -0,0 +1 @@
+title: データアクセス
diff --git a/docs/content/01.detailed/07.db/02.service_settings.md b/docs/content/01.detailed/07.db/02.service_settings.md
new file mode 100644
index 00000000..5c77df2a
--- /dev/null
+++ b/docs/content/01.detailed/07.db/02.service_settings.md
@@ -0,0 +1,40 @@
+---
+title: db.service_settings
+description: 動的なサービス設定情報のデータベース保存に用いるマッパーモデルを提供する。
+---
+
+## ServiceSettings
+当システムの動的なサービス設定情報のデータベース保存に用いるマッパーモデル定義。
+SQLAlchemy ORM を用いてデータベースの `service_settings` テーブルとマッピングされる。
+テーブル定義書 [service_settings テーブル ](../../03.db/01.service_settings.md#service_settings- テーブル ) を参照。
+
+#### シグネチャ
+```python[service_settings.py]
+class ServiceSettings(db.Model):
+```
+
+#### 依存するライブラリ
+- **SQLAlchemy**: ORM として使用。
+
+#### 継承元
+`SQLAlchemy.Model`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ----------------------------- | -------- | ------------------------------- |
+| __tablename__ | str | テーブル名。 `service_settings` |
+| key | str | 設定情報のキー |
+| updated | datetime | レコードの最終更新日時 |
+| value | dict | 設定情報の JSON データ |
+
+#### マッピング
+
+| カラム名 | データ型 | 主キー | NULL 許容 | デフォルト値 | ON UPDATE |
+| -------- | ---------------------------------- | ------ | --------- | ------------ | ---------- |
+| key | sqlalchemy.String(100) | Yes | | | |
+| updated | sqlalchemy.DateTime(timezone=True) | | | 協定世界時 | 協定世界時 |
+| value | sqlalchemy.ext.mutable.MutableDict | | | | |
+
+#### 備考
+- `value` カラムは PostgreSQL で JSONB 型を使用する。
diff --git a/docs/content/01.detailed/07.db/03.history.md b/docs/content/01.detailed/07.db/03.history.md
new file mode 100644
index 00000000..3c4a29de
--- /dev/null
+++ b/docs/content/01.detailed/07.db/03.history.md
@@ -0,0 +1,172 @@
+---
+title: db.history
+description: ダウンロード履歴 /アップロード履歴のデータベース保存に用いるマッパーモデルを提供する。
+---
+
+## DownloadHistory
+ダウンロード履歴のデータベース保存に用いるマッパーモデル定義。
+SQLAlchemy ORM を用いてデータベースの `download_history` テーブルとマッピングされる。
+テーブル定義書 [download_history テーブル ](../../03.db/02.history.md#download_history- テーブル ) を参照。
+
+#### シグネチャ
+```python[history.py]
+class DownloadHistory(db.Model):
+```
+
+#### 依存するライブラリ
+- **SQLAlchemy**: ORM として使用。
+- **uuid**: 履歴 ID を生成するために使用。
+
+#### 継承元
+`SQLAlchemy.Model`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ----------------------------- | --------- | ------------------------------------- |
+| __tablename__ | str | テーブル名。 `download_history` |
+| id | uuid.UUID | ダウンロード履歴の ID |
+| timestamp | datetime | ダウンロード日時 |
+| file_id | uuid.UUID | ダウンロードファイルの ID |
+| operator_id | str | ダウンロード実行者 ID |
+| operator_name | str | ダウンロード実行者名 |
+| public | bool | 履歴の公開設定 |
+| parent_id | uuid.UUID | 再ダウンロード時の初回ダウンロード ID |
+
+#### マッピング
+
+| カラム名 | データ型 | 主キー | NULL 許容 | デフォルト値 |
+| ------------- | ---------------------------------- | ------ | --------- | ------------ |
+| id | sqlalchemy.UUID | Yes | | |
+| timestamp | sqlalchemy.DateTime(timezone=True) | | | 協定世界時 |
+| file_id | sqlalchemy.UUID | | | |
+| operator_id | sqlalchemy.String(50) | | | |
+| operator_name | sqlalchemy.String(50) | | | |
+| public | sqlalchemy.Boolean | | | True |
+| parent_id | sqlalchemy.UUID | | Yes | |
+
+#### リレーションシップ
+
+| 名前 | 対象 | 多重度 |
+| --------- | ------------------ | ----------- |
+| file_id | Files.file_id | Many to One |
+| parent_id | DownloadHistory.id | Many to One |
+
+
+#### 備考
+- 48 ビットの UNIX エポックミリ秒タイムスタンプが含まれており B-tree インデックスにおいて非常に効率的であるため `id`,`file_id` は UUIDv7 を採用
+
+## UploadHistory
+アップロード履歴のデータベース保存に用いるマッパーモデル定義。
+SQLAlchemy ORM を用いてデータベースの `upload_history` テーブルとマッピングされる。
+テーブル定義書 [upload_history テーブル ](../../03.db/02.history.md#upload_history- テーブル ) を参照。
+
+#### シグネチャ
+```python[history.py]
+class UploadHistory(db.Model):
+```
+
+#### 依存するライブラリ
+- **SQLAlchemy**: ORM として使用。
+
+#### 継承元
+`SQLAlchemy.Model`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ----------------------------- | --------- | -------------------------------- |
+| __tablename__ | str | テーブル名。 `upload_history` |
+| id | uuid.UUID | アップロード履歴の ID |
+| timestamp | datetime | アップロード開始日時 |
+| end_timestamp | datetime | アップロード終了日時 |
+| file_id | uuid.UUID | アップロードファイルの ID |
+| operator_id | str | アップロード実行者 ID |
+| operator_name | str | アップロード実行者名 |
+| public | bool | 履歴の公開設定 |
+| status | Status | アップロード状況 |
+| results | dict | アップロード結果 |
+
+#### マッピング
+
+| カラム名 | データ型 | 主キー | NULL 許容 | デフォルト値 |
+| ------------- | ---------------------------------- | ------ | --------- | ------------ |
+| id | sqlalchemy.UUID | Yes | | |
+| timestamp | sqlalchemy.DateTime(timezone=True) | | | 協定世界時 |
+| end_timestamp | sqlalchemy.DateTime(timezone=True) | | Yes | |
+| file_id | sqlalchemy.UUID | | | |
+| operator_id | sqlalchemy.String(50) | | | |
+| operator_name | sqlalchemy.String(50) | | | |
+| public | sqlalchemy.Boolean | | | True |
+| status | sqlalchemy.String(1) | | | |
+| results | sqlalchemy.ext.mutable.MutableDict | | Yes | |
+
+#### リレーションシップ
+
+| 名前 | 対象 | 多重度 |
+| ------- | ------------- | ----------- |
+| file_id | Files.file_id | Many to One |
+
+#### 備考
+- `results` カラムは PostgreSQL で JSONB 型を使用する。
+- 48 ビットの UNIX エポックミリ秒タイムスタンプが含まれており B-tree インデックスにおいて非常に効率的であるため `id`,`file_id` は UUIDv7 を採用
+
+### Status
+status フィールドの要素に対応する型エイリアス。
+
+#### シグネチャ
+```python[history.py]
+type Status = typing.Literal["S", "P", "F", "C"]
+```
+
+#### 備考
+それぞれ対応は以下の通り
+- S: Success
+- P: In Progress
+- F: Failed
+- C: Cancel
+
+## Files
+ダウンロード /アップロードに用いたファイル情報のデータベース保存に用いるマッパーモデル定義。
+SQLAlchemy ORM を用いてデータベースの `files` テーブルとマッピングされる。
+テーブル定義書 [files テーブル ](../../03.db/02.history.md#files- テーブル ) を参照。
+
+#### シグネチャ
+```python[history.py]
+class Files(db.Model):
+```
+
+#### 依存するライブラリ
+- **SQLAlchemy**: ORM として使用。
+
+#### 継承元
+`SQLAlchemy.Model`
+
+#### クラス属性
+
+| 名前 | 型 | 説明 |
+| ----------------------------- | --------- | ---------------------------- |
+| __tablename__ | str | テーブル名。 `files` |
+| id | uuid.UUID | ファイル ID |
+| file_path | str | ファイルパス |
+| file_content | dict | ファイル内のユーザー等の情報 |
+
+#### マッピング
+
+| カラム名 | データ型 | 主キー | NULL 許容 | デフォルト値 |
+| ------------ | ---------------------------------- | ------ | --------- | ------------ |
+| id | sqlalchemy.UUID | Yes | | |
+| file_path | sqlalchemy.String(1024) | | | |
+| file_content | sqlalchemy.ext.mutable.MutableDict | | | |
+
+
+#### リレーションシップ
+
+| 名前 | 対象 | 多重度 |
+| ---- | ----------------------- | ----------- |
+| id | DownloadHistory.file_id | One to Many |
+| id | UploadHistory.file_id | One to Many |
+
+#### 備考
+- `file_content` カラムは PostgreSQL で JSONB 型を使用する。
+- 48 ビットの UNIX エポックミリ秒タイムスタンプが含まれており B-tree インデックスにおいて非常に効率的であるため `id` は UUIDv7 を採用
diff --git a/docs/content/01.detailed/index.md b/docs/content/01.detailed/index.md
new file mode 100644
index 00000000..c247d822
--- /dev/null
+++ b/docs/content/01.detailed/index.md
@@ -0,0 +1,33 @@
+---
+navigation:
+ title: はじめに
+title: サーバーサイド詳細設計書
+description: リポジトリ管理者向けのグループ管理ツール。
+headline: JAIRO Cloud Groups Manager
+---
+
+## 本書について
+本書は、JAIRO Cloud Groups Manager(以降、当システム)のサーバーサイドの詳細設計を記述したものである。
+
+
+## 前提条件
+当システムは、以下のサービスに依存する。
+- mAP Core Authorization Server
+- mAP Core API V2
+
+また、本機能は以下の環境で動作することを前提とする。
+- Python 3.14.x
+- Flask 3.1.x
+- Celery 5.6.x
+
+
+## 主要な依存ライブラリ
+- **Flask**: Web アプリケーションフレームワーク。REST API やルーティング、リクエスト管理を提供する。
+- **SQLAlchemy**: ORM。データベース接続・モデル定義・クエリ発行を担当する。
+- **Celery**: 分散タスクキュー。非同期処理(例:グループ作成・更新のバックグラウンド処理)を実現する。
+- **Pydantic**: JSON および Python オブジェクト間の型安全なシリアライズ・デシリアライズを行う。
+- **Redis**: Celery のバックエンド、セッション管理、キャッシュストアとして利用する。
+- **amqp (RabbitMQ)**: Celery のメッセージブローカーとして使用する。
+
+すべての依存関係は、uv で管理され、`pyproject.toml` および `uv.lock` に記録される。
+あるいは、 [依存関係グラフ](https://github.com/RCOSDP/jairocloud-groups-manager/network/dependencies) から確認することもできる。
diff --git a/docs/content/02.api/.navigation.yml b/docs/content/02.api/.navigation.yml
new file mode 100644
index 00000000..9db192c6
--- /dev/null
+++ b/docs/content/02.api/.navigation.yml
@@ -0,0 +1,2 @@
+title: API 仕様書
+icon: i-lucide-cog
diff --git a/docs/content/02.api/endpoints.md b/docs/content/02.api/endpoints.md
new file mode 100644
index 00000000..8f6007db
--- /dev/null
+++ b/docs/content/02.api/endpoints.md
@@ -0,0 +1,43 @@
+---
+title: エンドポイント一覧
+description: 当システムが提供する API のエンドポイント一覧。
+headline: API 仕様書
+---
+
+## 認証・セッション関連 API
+
+| メソッド | エンドポイント | ログイン済み | 未ログイン | 概要 |
+| -------- | ---------------- | :----------: | :--------: | ---------- |
+| POST | /api/auth/login | - | ○ | ログイン |
+| POST | /api/auth/logout | ○ | - | ログアウト |
+
+## リポジトリ管理 API
+
+| メソッド | エンドポイント | システム管理者 | リポジトリ管理者 | 概要 |
+| -------- | --------------------- | :------------: | :--------------: | -------------------------- |
+| GET | /api/repositories | ○ | ○ | リポジトリの一覧取得・検索 |
+| POST | /api/repositories | ○ | × | リポジトリの作成 |
+| GET | /api/repositories/:id | ○ | ○ | リポジトリの情報取得 |
+| PUT | /api/repositories/:id | ○ | × | リポジトリの更新 |
+| DELETE | /api/repositories/:id | ○ | × | リポジトリの削除 |
+
+## グループ管理 API
+
+| メソッド | エンドポイント | システム管理者 | リポジトリ管理者 | 説明 |
+| -------- | --------------- | :------------: | :--------------: | ------------------------ |
+| GET | /api/groups | ○ | ○ | グループの一覧取得・検索 |
+| POST | /api/groups | ○ | ○ | グループの作成 |
+| GET | /api/groups/:id | ○ | ○ | グループの情報取得 |
+| PUT | /api/groups/:id | ○ | ○ | グループの更新 |
+| PATCH | /api/groups/:id | ○ | ○ | グループの部分更新 |
+| DELETE | /api/groups/:id | ○ | ○ | グループの削除 |
+
+## ユーザー管理 API
+
+| メソッド | エンドポイント | システム管理者 | リポジトリ管理者 | 概要 |
+| ---------- | -------------- | :------------: | :--------------: | ------------------------------ |
+| GET | /api/users | ○ | ○ | ユーザーの取得・検索 |
+| POST | /api/users | ○ | ○ | ユーザーの作成 |
+| GET | /api/users/:id | ○ | ○ | ユーザーの情報取得 |
+| PUT | /api/users/:id | ○ | ○ | ユーザーの更新 |
+| ~~DELETE~~ | /api/users/:id | ○ | × | ユーザーの削除(実装予定なし) |
diff --git a/docs/content/02.api/index.md b/docs/content/02.api/index.md
new file mode 100644
index 00000000..e9a895bd
--- /dev/null
+++ b/docs/content/02.api/index.md
@@ -0,0 +1,14 @@
+---
+navigation:
+ title: はじめに
+title: API 仕様書
+description: リポジトリ管理者向けのグループ管理ツール。
+headline: JAIRO Cloud Groups Manager
+---
+
+## 本書について
+本書は、JAIRO Cloud Groups Manager(以降、当システム)が提供する API の仕様を記述したものである。
+
+
+## 注意事項
+この API は主にクライアントサイドのアプリケーションから利用されることを想定しており、単独での利用は考慮されていない。
diff --git a/docs/content/03.db/.navigation.yml b/docs/content/03.db/.navigation.yml
new file mode 100644
index 00000000..a2f2aba7
--- /dev/null
+++ b/docs/content/03.db/.navigation.yml
@@ -0,0 +1,2 @@
+title: テーブル定義書
+icon: i-lucide-database
diff --git a/docs/content/03.db/01.service_settings.md b/docs/content/03.db/01.service_settings.md
new file mode 100644
index 00000000..fdce8502
--- /dev/null
+++ b/docs/content/03.db/01.service_settings.md
@@ -0,0 +1,36 @@
+---
+title: 動的サービス設定情報
+description: 動的なサービス設定情報を保持する。
+---
+
+## service_settings テーブル
+当システムの動的なサービス設定情報を保持するテーブル。キー・バリュー形式で設定情報を保存する。
+
+#### カラム定義
+
+| カラム名 | データ型 | NOT NULL | デフォルト値 | 説明 |
+| -------- | ------------------------ | -------- | ------------------------ | ---------------------------- |
+| key | character varying(100) | Yes | | ユニークな設定キー |
+| updated | timestamp with time zone | Yes | `timezone('UTC', now())` | 最終更新日時 |
+| value | jsonb | Yes | | 設定値( JSON オブジェクト) |
+
+#### インデックス
+
+| インデックス名 | 対象カラム | 主キー | ユニーク |
+| ------------------- | ---------- | ------ | -------- |
+| pk_service_settings | key | Yes | Yes |
+
+#### 制約
+
+| 制約名 | 対象カラム | 制約種別 |
+| ------------------- | ---------- | -------- |
+| pk_service_settings | key | 主キー |
+
+#### 外部キー
+(なし)
+
+#### 外部キー( PK 側)
+(なし)
+
+#### 備考
+- レコード更新時に `updated` はアプリケーション側( Python/ORM )で自動更新される。
diff --git a/docs/content/03.db/02.history.md b/docs/content/03.db/02.history.md
new file mode 100644
index 00000000..7ffc770c
--- /dev/null
+++ b/docs/content/03.db/02.history.md
@@ -0,0 +1,131 @@
+---
+title: 履歴データ
+description: ダウンロード履歴 /アップロード履歴を保持する。
+---
+
+## download_history テーブル
+ダウンロード履歴を保持するテーブル。
+
+#### カラム定義
+
+| カラム名 | データ型 | NOT NULL | デフォルト値 | 説明 |
+| --------- | ---------------------------- | -------- | ---------------------- | ------------------------- |
+| id | uuid | Yes | | 履歴データの ID |
+| timestamp | timestamp (6) with time zone | Yes | timezone('UTC', now()) | ダウンロード日時 |
+| file_id | uuid | Yes | | ファイル ID |
+| operator | character varying(50) | Yes | true | 操作の実行ユーザー |
+| public | boolean | Yes | | 履歴の公開 / 非公開フラグ |
+| parent_id | uuid | | | 初回ダウンロードの ID |
+
+#### インデックス
+
+| インデックス名 | 対象カラム | 主キー | ユニーク |
+| ----------------------------- | ---------- | ------ | -------- |
+| pk_download_history | id | Yes | Yes |
+| ix_download_history_operator | operator | | |
+| ix_download_history_timestamp | timestamp | | |
+
+#### 制約
+
+| 制約名 | 対象カラム | 制約種別 |
+| ------------------- | ---------- | -------- |
+| pk_download_history | id | 主キー |
+
+#### 外部キー
+
+| 外部キー名 | 対象カラム | 参照先テーブル | 参照先カラム |
+| ---------------------------------------------- | ---------- | ---------------- | ------------ |
+| fk_download_history_file_id_files | file_id | files | id |
+| fk_download_history_parent_id_download_history | parent_id | download_history | id |
+
+
+#### 外部キー( PK 側)
+
+| 外部キー名 | 対象カラム | 参照元テーブル | 参照元カラム |
+| ---------------------------------------------- | ---------- | ---------------- | ------------ |
+| fk_download_history_parent_id_download_history | id | download_history | parent_id |
+
+#### 備考
+( なし )
+
+
+## upload_history テーブル
+アップロード履歴を保持するテーブル。
+
+#### カラム定義
+
+| カラム名 | データ型 | NOT NULL | デフォルト値 | 説明 |
+| ------------- | ---------------------------- | -------- | ---------------------- | -------------------------------- |
+| id | uuid | Yes | | 履歴データの ID |
+| timestamp | timestamp (6) with time zone | Yes | timezone('UTC', now()) | アップロード開始日時 |
+| end_timestamp | timestamp (6) with time zone | | | アップロード終了日時 |
+| file_id | uuid | Yes | | ファイル ID |
+| operator | character varying(50) | Yes | | 操作の実行ユーザー |
+| public | boolean | Yes | true | 履歴の公開 / 非公開フラグ |
+| status | character varying(1) | Yes | | アップロード状況 |
+| results | jsonb | | | アップロード結果 |
+
+#### インデックス
+
+| インデックス名 | 対象カラム | 主キー | ユニーク |
+| --------------------------- | ---------- | ------ | -------- |
+| pk_upload_history | id | Yes | Yes |
+| ix_upload_history_operator | operator | | |
+| ix_upload_history_results | results | | |
+| ix_upload_history_timestamp | timestamp | | |
+
+#### 制約
+
+| 制約名 | 対象カラム | 制約種別 |
+| ------------------------ | ---------- | -------- |
+| pk_upload_history | id | 主キー |
+| ck_upload_history_status | status | CHECK |
+
+#### 外部キー
+
+| 外部キー名 | 対象カラム | 参照先テーブル | 参照先カラム |
+| ------------------------------- | ---------- | -------------- | ------------ |
+| fk_upload_history_file_id_files | file_id | files | id |
+
+#### 外部キー( PK 側)
+( なし )
+
+#### 備考
+( なし )
+
+
+## files テーブル
+アップロード / ダウンロードに用いたファイルの情報を保持するテーブル。
+
+#### カラム定義
+
+| カラム名 | データ型 | NOT NULL | デフォルト値 | 説明 |
+| ------------ | ----------------------- | -------- | ------------ | ---------------------------- |
+| id | uuid | Yes | | ファイル ID |
+| file_path | character varying(1024) | Yes | | ファイルパス |
+| file_content | jsinb | Yes | | ファイル内のユーザー等の情報 |
+
+#### インデックス
+
+| インデックス名 | 対象カラム | 主キー | ユニーク |
+| --------------------- | ------------ | ------ | -------- |
+| pk_files | id | Yes | Yes |
+| ix_files_file_content | file_content | | |
+
+#### 制約
+
+| 制約名 | 対象カラム | 制約種別 |
+| -------- | ---------- | -------- |
+| pk_files | id | 主キー |
+
+#### 外部キー
+( なし )
+
+#### 外部キー( PK 側)
+| 外部キー名 | 対象カラム | 参照元テーブル | 参照元カラム |
+| --------------------------------- | ---------- | ---------------- | ------------ |
+| fk_download_history_file_id_files | id | download_history | file_id |
+| fk_upload_history_file_id_files | id | upload_history | file_id |
+
+#### 備考
+( なし )
diff --git a/docs/content/03.db/index.md b/docs/content/03.db/index.md
new file mode 100644
index 00000000..9ad0e2d3
--- /dev/null
+++ b/docs/content/03.db/index.md
@@ -0,0 +1,25 @@
+---
+navigation:
+ title: はじめに
+title: テーブル定義書
+description: リポジトリ管理者向けのグループ管理ツール。
+headline: JAIRO Cloud Groups Manager
+---
+
+## 本書について
+本書は、JAIRO Cloud Groups Manager(以降、当システム)が利用するデータベースのテーブル定義を記述したものである。
+
+
+## 前提条件
+当システムは、データベースとして PostgreSQL を利用することを前提とする。
+
+
+## 制約名命名規則
+
+| 制約種別 | 命名規則 |
+| ------------ | ----------------------------------------------------------- |
+| 主キー | pk_%(table_name)s |
+| ユニーク | uq_%(table_name)s_%(column_0_name)s |
+| インデックス | ix_%(column_0_label)s |
+| チェック | ck_%(table_name)s_%(constraint_name)s |
+| 外部キー | fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s |
diff --git a/docs/content/05.manual/.navigation.yml b/docs/content/05.manual/.navigation.yml
new file mode 100644
index 00000000..fa715822
--- /dev/null
+++ b/docs/content/05.manual/.navigation.yml
@@ -0,0 +1,2 @@
+title: マニュアル
+icon: i-lucide-book-check
diff --git a/docs/content/05.manual/01.initialization/.navigation.yml b/docs/content/05.manual/01.initialization/.navigation.yml
new file mode 100644
index 00000000..557fcc51
--- /dev/null
+++ b/docs/content/05.manual/01.initialization/.navigation.yml
@@ -0,0 +1,2 @@
+title: 初期構築マニュアル
+system-admin-only: true
diff --git a/docs/content/05.manual/01.initialization/01.initialization.md b/docs/content/05.manual/01.initialization/01.initialization.md
new file mode 100644
index 00000000..aaab639d
--- /dev/null
+++ b/docs/content/05.manual/01.initialization/01.initialization.md
@@ -0,0 +1,60 @@
+---
+title: 初期構築マニュアル
+description: JAIRO Cloud Groups Managerの初期構築手順についてのマニュアル。
+---
+## 概要
+本書は、JAIRO Cloud Groups Manager(以降、当システム)を新規に導入する際の**初期構築手順**について記述したマニュアルである。
+
+## 前提条件
+当システムで管理するリポジトリは以下の条件を満たす必要がある。
+- リポジトリは学認フェデレーションに参加し、EntityID を持つこと。
+ EntityIDは `https:///shibboleth-sp` の形式である必要がある。
+
+## 事前準備
+当システムの初期構築を行う前に、以下の事前準備を完了しておく必要がある。
+
+1. Redis および PostgreSQL と接続可能なコンソール環境を用意する。
+2. FQDN 一覧を含むテキストファイルを用意する。
+ FQDN を参照してリポジトリを操作する際に使用する。
+ - テキストファイルは一行ごとにリポジトリの FQDN を記載すること。
+ - 行内がスペース区切りになっている場合は、最初の要素が FQDN として扱われる。
+3. 各リポジトリに対応する SP 証明書と秘密鍵をマウントしたディレクトリを用意する。
+ キャッシュ DB の更新時にはここに配置された証明書と秘密鍵が使用される。
+ - ディレクトリの構造は以下の通りとする。
+ ```
+ .
+ ├──
+ │ ├── server.crt # SP証明書
+ │ ├── server.key # SP秘密鍵
+ │
+ ├──
+ │ ├── server.crt
+ │ ├── server.key
+ │
+ └── ...
+ ```
+
+
+
+
+## 初期構築手順
+初期構築用スクリプトを実行することで、以下の初期構築処理が自律的に行われる。
+::note
+アクセストークンの発行時には手動での操作が必要となる。
+::
+
+::steps{level="4"}
+#### データベースの初期化
+- データベースの初期化を行う。
+- これには、データベースの作成や必要なテーブルの作成が含まれる。
+
+#### アクセストークンの発行
+- システムの管理者用アクセストークンを発行する。
+- 操作者にはアクセストークン発行のための認証画面のURLが表示される。
+- 操作者が認証を完了するまで待機し、認証完了後にアクセストークンが発行される。
+
+#### リポジトリに対応するSPコネクタの一括作成
+- FQDN一覧をもとに各リポジトリに対応するSPコネクタを一括で作成する。
+- FQDN一覧を含むテキストファイルを読み込み、SPコネクタを作成する。
+::
+
diff --git a/docs/content/05.manual/02.login/.navigation.yml b/docs/content/05.manual/02.login/.navigation.yml
new file mode 100644
index 00000000..27edf2c4
--- /dev/null
+++ b/docs/content/05.manual/02.login/.navigation.yml
@@ -0,0 +1 @@
+title: ログイン・レイアウト
diff --git a/docs/content/05.manual/02.login/01.login.md b/docs/content/05.manual/02.login/01.login.md
new file mode 100644
index 00000000..fc346913
--- /dev/null
+++ b/docs/content/05.manual/02.login/01.login.md
@@ -0,0 +1,24 @@
+---
+title: ログイン
+description: 当システムへのログインすることができる。
+---
+## 概要
+Shibbolethログインを使用して当システムにログインすることができる。
+
+## 前提条件
+当システムにログインするためには、以下の前提条件を満たす必要がある。
+::repository-admin-view
+所属機関リポジトリのリポジトリ管理者であること。
+IdPで認証が可能であること。
+::
+::system-admin-only
+システム管理者であること。
+IdPで認証が可能であること。
+::
+
+## ログイン手順
+::steps{level="4"}
+#### ログイン画面にアクセスする。
+#### 所属機関を選択する。
+#### IdP で認証を行う。
+#### ログイン成功後、[リポジトリ一覧](../03.repositories/01.summary.md)画面へ遷移する。
diff --git a/docs/content/05.manual/02.login/02.common.md b/docs/content/05.manual/02.login/02.common.md
new file mode 100644
index 00000000..64edac75
--- /dev/null
+++ b/docs/content/05.manual/02.login/02.common.md
@@ -0,0 +1,70 @@
+---
+title: レイアウト
+description: 当システムの共通部品であるヘッダー、フッター、サイドメニューについて説明する。
+---
+
+## ヘッダー
+
+ロゴ、検索ボックス、ダークモード切替ボタン、言語切り替えボタン、ユーザーボタンが表示される。
+
+#### ロゴ
+当システムのロゴが表示される。ロゴをクリックするとトップページである[リポジトリ一覧](../03.repositories/01.summary.md)画面へ遷移する。
+
+#### 横断検索
+リポジトリ、グループ、ユーザーの検索を行うことができる。キーワードを入力してエンターキーを押下することで検索が実行される。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#globalsearchlimit)で設定した値に応じて、検索結果の最大表示件数が制限される。
+
+
+
+
+#### カラーモード切替ボタン
+ダークモード切替ボタンをクリックすることで、ダークモードとライトモードを切り替えることができる。
+
+#### 言語切り替えボタン
+言語切り替えボタンをクリックすることで、表示言語を日本語と英語の間で切り替えることができる。
+
+#### ユーザーボタン
+ユーザーボタンをクリックすることで、ユーザーメニューが表示される。
+
+
+ユーザーメニューには、ユーザー名、ePPN、プロフィールボタン、利用者マニュアルボタン、ログアウトボタンが表示される。
+::repository-admin-view
+- プロフィールボタンをクリックすると自身の[ユーザー詳細](../05.users/03.detail.md)画面へ遷移する。
+- 利用者マニュアルボタンをクリックすると当マニュアルのトップページへ遷移する。
+- ログアウトボタンをクリックすると当システムからログアウトする。
+::
+::system-admin-only
+- プロフィールボタンをクリックすると自身の[ユーザー詳細](../05.users/03.detail.md)画面へ遷移する。
+- 利用者マニュアルボタンをクリックすると当マニュアルのトップページへ遷移する。
+[アプリケーション設定値](../08.config/01.app-config.md#usermanualurl)に当マニュアルの URL を設定した場合のみ表示される。
+- ログアウトボタンをクリックすると当システムからログアウトする。
+::
+
+## フッター
+::repository-admin-view
+
+
+[リポジトリ一覧](../03.repositories/01.summary.md)、[グループ一覧](../04.groups/01.summary.md)、[ユーザー一覧](../05.users/01.summary.md)、[履歴](../06.history/01.summary.md)へのリンクが表示される。
+::
+::system-admin-only
+
+
+[リポジトリ一覧](../03.repositories/01.summary.md)、[グループ一覧](../04.groups/01.summary.md)、[ユーザー一覧](../05.users/01.summary.md)、[履歴](../06.history/01.summary.md)、[グループキャッシュ](../07.cache/01.cache-db.md)へのリンクが表示される。
+::
+
+
+
+## サイドメニュー
+::repository-admin-view
+
+
+フッター同様各ページへのリンクが表示される。
+::
+
+::system-admin-only
+
+システム管理者はサイドメニューの上部にシステム管理者のバッジが表示される。
+
+フッター同様各ページへのリンクが表示される。
+::
diff --git a/docs/content/05.manual/03.repositories/.navigation.yml b/docs/content/05.manual/03.repositories/.navigation.yml
new file mode 100644
index 00000000..29d5c48f
--- /dev/null
+++ b/docs/content/05.manual/03.repositories/.navigation.yml
@@ -0,0 +1 @@
+title: リポジトリ管理機能
diff --git a/docs/content/05.manual/03.repositories/01.summary.md b/docs/content/05.manual/03.repositories/01.summary.md
new file mode 100644
index 00000000..c30a2595
--- /dev/null
+++ b/docs/content/05.manual/03.repositories/01.summary.md
@@ -0,0 +1,96 @@
+---
+title: リポジトリ一覧
+description: 管理しているリポジトリの情報を確認することができる。
+---
+
+## 概要
+::repository-admin-view
+自身がリポジトリ管理者ロールを持つリポジトリの情報を確認することができる。
+サイドメニューまたはページフッターの「管理」>「リポジトリ」をクリックすることで表示される。
+
+
+::
+
+::system-admin-only
+自身がリポジトリ管理者ロールを持つリポジトリの情報を確認することができる。
+システム管理者はすべてのリポジトリの情報を確認することができる。
+サイドメニューまたはページフッターの「管理」>「リポジトリ」をクリックすることで表示される。
+
+
+::
+
+## 表示形式の切り替え
+画面右上のテーブル表示に切り替え/カード表示に切り替えボタンをクリックすることで表示形式を切り替えることができる。
+::repository-admin-view
+ページ遷移時はカード表示でリポジトリの一覧が表示されボタンクリックで表示形式を切り替えることができる。
+
+::
+
+::system-admin-only
+ページ遷移時はテーブル表示でリポジトリの一覧が表示されボタンクリックでカード表示に切り替えることができる。
+
+::
+
+## 検索機能
+検索欄にキーワードを入力することでリポジトリ名、URL、EntityID に対して部分一致検索ができる。
+::steps{level="4"}
+#### 検索欄に検索したいリポジトリ名、URL、EntityID のいずれかを入力する。
+::warning
+現在、カード表示ではリポジトリ名のみ検索が可能である。
+::
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#repositoriesserver-search)の repositories.server-search で検索をサーバーで行うかブラウザで行うかを設定することができる。
+::
+#### エンターキーを押下して検索を実行する。
+#### 検索欄に入力した文字列を含むリポジトリのみ一覧に表示される。
+
+::
+
+## リポジトリ情報
+検索欄の下にテーブル表示 / カード表示でリポジトリの一覧が表示される。
+ リポジトリ名をクリックすると[リポジトリ詳細画面](03.edit.md)に移動する。
+ URL をクリックすると外部サイトを別タブで開く。
+- リポジトリが存在しない場合メッセージと再読み込みボタンが表示される。
+
+#### 表示件数の切り替え
+表示件数プルダウンから1ページに表示される件数を変更することができる。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#pagesizerepositories)で設定した値に応じて、表示件数の切り替えの選択肢が表示される。
+::
+
+
+#### 表示項目の切り替え
+テーブル表示の列の表示/非表示を切り替えることができる。
+リポジトリ名は必ず表示される。
+
+
+#### ページ切り替え
+一覧下部のページネーションから表示するリポジトリのページを切り替えることができる。
+
+## アクションメニュー
+URL のコピー等のアクションを行うことができる
+::steps{level="4"}
+#### テーブル表示で、各行の一番右にあるアクションボタンをクリックする。
+#### メニューが表示される。
+
+
+#### 「URL をコピー」を選択した場合、クリップボードに URL がコピーされる。
+
+
+#### 「SP コネクタ ID をコピー」を選択した場合、クリップボードに SPコネクタIDがコピーされる。
+
+
+#### 「詳細を見る」を選択した場合、 [リポジトリ詳細画面](03.edit.md)へ遷移する。
+::
+
+::system-admin-only
+## 新規作成
+新規作成ボタンをクリックすることで[リポジトリ作成画面](02.create.md)へ遷移する。
+
+::
+
+
+
+
+
+
diff --git a/docs/content/05.manual/03.repositories/02.create.md b/docs/content/05.manual/03.repositories/02.create.md
new file mode 100644
index 00000000..f9d1c618
--- /dev/null
+++ b/docs/content/05.manual/03.repositories/02.create.md
@@ -0,0 +1,41 @@
+---
+title: リポジトリ作成
+description: リポジトリの作成をおこなうことができる。
+system-admin-only: true
+---
+
+## 概要
+- システム管理者はリポジトリの作成を行うことができる。
+- リポジトリ一覧で新規作成ボタンをクリックするとリポジトリ作成画面が表示される。
+
+
+## 作成手順
+::steps{level="4"}
+#### リポジトリ名を入力する。
+リポジトリの表示名であり実際のサービス名とは連動しない。
+
+
+#### URL を入力する。
+リポジトリの URL であり https:// で始まる URL を入力する必要がある。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#maxurllength)の maxUrlLength で URL の最大値を設定することができる。
+::
+
+
+#### EntityID を入力する。
+- 複数設定する場合は追加ボタンをクリックすると入力欄が追加される。
+
+
+- 入力欄が複数ある場合、各入力欄に表示される×ボタンをクリックすることで入力欄を削除することができる。
+
+ ::note
+ すべての入力欄に値を入力する必要があるため、必ず設定するEntityIDの数と同じにする必要がある。
+ ::
+
+
+
+#### 保存ボタンをクリックする。
+#### リポジトリが作成される。
+#### 作成をキャンセルする場合は取り消しボタンをクリックする。
+::
+
diff --git a/docs/content/05.manual/03.repositories/03.detail.md b/docs/content/05.manual/03.repositories/03.detail.md
new file mode 100644
index 00000000..a340b4ca
--- /dev/null
+++ b/docs/content/05.manual/03.repositories/03.detail.md
@@ -0,0 +1,52 @@
+---
+title: リポジトリ詳細
+description: リポジトリ詳細情報の確認をおこなうことができる。
+---
+
+## 概要
+自身がリポジトリ管理者ロールを持つリポジトリの詳細情報を確認することができる。
+ リポジトリ一覧画面でリポジトリ名をクリックすると、リポジトリ詳細画面が表示される。
+::repository-admin-view
+
+::
+::system-admin-only
+システム管理者はリポジトリの編集・削除を行うことができる。
+
+::
+
+## 表示内容
+::repository-admin-view
+- グループ数、ユーザー数とリポジトリ基本情報が表示される。
+- リポジトリ基本情報としてリポジトリ名、URL、EntityID、SP コネクタ ID、作成日時を確認することができる。
+- グループ数をクリックするとリポジトリでフィルターされた状態で[グループ一覧画面](../02.groups/01.summary.md)に遷移する。
+- ユーザー数をクリックするとリポジトリでフィルターされた状態で[ユーザー一覧画面](../05.users/01.summary.md)に遷移する。
+::
+
+::system-admin-only
+- グループ数、ユーザー数とリポジトリ基本情報が表示される。
+- リポジトリ基本情報としてリポジトリ名、URL、EntityID、SP コネクタ ID、稼働状態、作成日時を確認することができる。
+- グループ数をクリックするとリポジトリでフィルターされた状態で[グループ一覧画面](../02.groups/01.summary.md)に遷移する。
+- ユーザー数をクリックするとリポジトリでフィルターされた状態で[ユーザー一覧画面](../05.users/01.summary.md)に遷移する。
+
+## リポジトリ編集
+リポジトリの編集を行うことができる
+
+::steps{level="4"}
+#### 編集したい内容を入力する。
+#### すべての入力が終わったら画面右下の更新ボタンをクリックする。
+#### リポジトリが更新される。
+
+::
+
+## リポジトリ削除
+リポジトリの削除を行うことができる
+
+::steps{level="4"}
+#### 削除ボタンをクリックする。
+#### 確認ダイアログが表示され、リポジトリ名を入力して削除ボタンをクリックする。
+
+
+#### リポジトリが削除される。
+
+::
+::
diff --git a/docs/content/05.manual/04.groups/.navigation.yml b/docs/content/05.manual/04.groups/.navigation.yml
new file mode 100644
index 00000000..aa7d8cd9
--- /dev/null
+++ b/docs/content/05.manual/04.groups/.navigation.yml
@@ -0,0 +1 @@
+title: グループ管理機能
diff --git a/docs/content/05.manual/04.groups/01.summary.md b/docs/content/05.manual/04.groups/01.summary.md
new file mode 100644
index 00000000..e3df29a2
--- /dev/null
+++ b/docs/content/05.manual/04.groups/01.summary.md
@@ -0,0 +1,113 @@
+---
+title: グループ一覧
+description: 管理しているグループの情報を確認することができる。
+---
+
+## 概要
+自身の管理するリポジトリ内のグループ情報を確認することができる。
+::system-admin-only
+システム管理者はすべてのグループの情報を確認することができる。
+::
+サイドメニューまたはページフッターの「管理」>「グループ」をクリックすることで表示される。
+
+
+## 新規作成
+新規作成ボタンをクリックすることで[グループ作成画面](02.create.md)へ遷移する。
+
+
+## 検索機能
+検索欄にキーワードを入力することでグループ名に対して部分一致検索ができる。
+::steps{level="4"}
+#### 検索欄に検索したいグループ名を入力する。
+#### エンターキーを押下して検索を実行する。
+#### 検索欄に入力した文字列を含むグループのみ一覧に表示される。
+
+::
+
+## フィルター機能
+::steps{level="4"}
+#### フィルターボタンを押下する。
+
+#### フィルター項目のプルダウンが表示される。
+
+
+#### プルダウン内の項目を選択する。
+
+
+#### 選択したフィルター条件に合致するグループのみ一覧に表示される。
+
+
+::
+
+## グループ情報
+各グループの情報を表示する
+- グループ名をクリックすると[グループ編集画面](03.edit.md)へ遷移する。
+- カラム名をクリックすることで昇順・降順の切り替えができる。
+::warning
+現在、ソート機能は利用することができない。
+::
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#groupssort-columns)の groups.sort-columns でソートを許可するかどうかを設定することができる。
+::
+- グループが存在しない場合メッセージと再読み込みボタンが表示される。
+
+
+#### 表示件数の切り替え
+表示件数プルダウンから1ページに表示される件数を変更することができる。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#pagesizegroups)で設定した値に応じて、表示件数の切り替えの選択肢が表示される。
+::
+
+
+#### 表示項目の切り替え
+テーブル表示の列の表示/非表示を切り替えることができる。
+ グループ名は必ず表示される。
+
+
+#### ページ切り替え
+一覧下部のページネーションから表示するグループのページを切り替えることができる。
+
+## アクションメニュー
+「グループIDをコピー」、「詳細をみる」、「削除」を選択することができる。
+
+::repository-admin-view
+::steps{level="4"}
+#### アクションボタンをクリックする。
+
+
+#### 「グループIDをコピー」を選択した場合、グループIDがクリップボードにコピーされる。
+
+
+#### 「詳細をみる」を選択した場合、 [グループ編集画面](03.edit.md)へ遷移する。
+#### 「削除」を選択した場合、削除確認ダイアログが表示される。
+ ダイアログ内の「削除」ボタンをクリックするとグループが削除される。
+::
+::
+
+::system-admin-only
+システム管理者は「クラウドゲートウェイで開く」を選択することができる。
+::steps{level="4"}
+#### アクションボタンをクリックする。
+#### 「詳細をみる」を選択した場合、 [グループ編集画面](03.edit.md)へ遷移する。
+#### 「削除」を選択した場合、削除確認ダイアログが表示される。
+ ダイアログ内の「削除」ボタンをクリックするとグループが削除される。
+#### 「クラウドゲートウェイで開く」を選択した場合クラウドゲートウェイが別タブで開かれる。
+::
+::
+
+## グループ削除
+複数のグループをまとめて削除することができる。
+::steps{level="4"}
+#### 削除したいグループのチェックボックスにチェックを入れる。
+
+
+#### 画面右上の「選択したグループへのアクション」ボタンをクリックする。
+#### グループ削除を選択する。
+
+
+#### 削除確認ダイアログが表示される。
+
+
+#### ダイアログ内の「削除」ボタンをクリックすると選択したグループが削除される。
+
+::
diff --git a/docs/content/05.manual/04.groups/02.create.md b/docs/content/05.manual/04.groups/02.create.md
new file mode 100644
index 00000000..2d34d38a
--- /dev/null
+++ b/docs/content/05.manual/04.groups/02.create.md
@@ -0,0 +1,43 @@
+---
+title: グループ作成
+description: グループの作成をおこなうことができる。
+---
+
+## 概要
+- リポジトリ管理者は管理するリポジトリ内のグループの作成を行うことができる。
+
+## 表示内容
+
+
+- グループを作成するリポジトリを選択するプルダウンが表示される。
+- グループID、グループ名、グループ説明の入力欄が表示される。
+- 画面右下に「保存」ボタン、画面左下に「取り消し」ボタンが表示される。
+
+## 作成手順
+::steps{level="4"}
+#### グループを作成するリポジトリを選択する。
+ 自身の管理するリポジトリがプルダウンに表示される。
+
+
+#### グループIDを入力する。
+ グループIDは半角英数字、ハイフン(-)、アンダースコア(_)、ドット(.)のみ使用可能である。
+ ::system-admin-only
+ [アプリケーション設定値](../08.config/01.app-config.md#maxidlength)の maxIdLength でグループ ID の最大値を設定することができる。
+ ::
+
+
+#### グループ名を入力する。
+
+
+#### グループ説明を入力する。
+ グループ説明は任意入力である。
+
+
+#### 「保存」ボタンをクリックする。
+ 作成をキャンセルする場合は「取り消し」ボタンをクリックする。
+#### グループが作成される。
+
+
+#### [一覧画面](01.summary.md)へ遷移する。
+::
+
diff --git a/docs/content/05.manual/04.groups/03.detail.md b/docs/content/05.manual/04.groups/03.detail.md
new file mode 100644
index 00000000..f9c48004
--- /dev/null
+++ b/docs/content/05.manual/04.groups/03.detail.md
@@ -0,0 +1,44 @@
+---
+title: グループ詳細
+description: グループの詳細情報の確認と編集をおこなうことができる。
+---
+
+## 概要
+- リポジトリ管理者は管理するリポジトリ内のグループの編集・削除を行うことができる
+- [グループ一覧画面](01.summary.md)で編集したいグループ名をクリック、またはアクションメニューの「詳細をみる」を選択すると、グループ編集画面が表示され編集を行うことができる。
+
+## 表示内容
+
+
+- 所属リポジトリ、メンバー数、グループID、グループ名、グループ説明が表示される
+- メンバー数をクリックするとグループでフィルターされている状態で[ユーザー一覧画面](../04.users/01.summary.md)へ遷移する
+- 画面右下に「更新」ボタン、画面左下に「取り消し」ボタン、画面右上に「削除」ボタンが表示される
+
+## グループ編集
+グループの編集を行うことができる。
+
+::steps{level="4"}
+#### 編集したい値を入力する。
+ グループIDは編集することができない。
+#### 「更新」ボタンをクリックする。
+#### グループが更新される。
+
+
+#### 取り消す場合は「取り消し」ボタンをクリックする。
+#### 入力内容が編集前の状態に戻る。
+::
+
+## グループ削除
+グループの削除を行うことができる。
+
+::steps{level="4"}
+#### 「削除」ボタンをクリックする。
+
+
+#### 削除確認ダイアログが表示される。
+
+
+#### ダイアログ内の「削除」ボタンをクリックするとグループが削除される。
+
+
+::
diff --git a/docs/content/05.manual/05.users/.navigation.yml b/docs/content/05.manual/05.users/.navigation.yml
new file mode 100644
index 00000000..b2365ac6
--- /dev/null
+++ b/docs/content/05.manual/05.users/.navigation.yml
@@ -0,0 +1 @@
+title: ユーザー管理機能
diff --git a/docs/content/05.manual/05.users/01.summary.md b/docs/content/05.manual/05.users/01.summary.md
new file mode 100644
index 00000000..8ccdcea6
--- /dev/null
+++ b/docs/content/05.manual/05.users/01.summary.md
@@ -0,0 +1,175 @@
+---
+title: ユーザー一覧
+description: 管理しているユーザーの情報を確認することができる。
+---
+
+## 概要
+自身の管理するリポジトリ内のユーザー情報を確認することができる。
+::system-admin-only
+システム管理者はすべてのユーザーの情報を確認することができる。
+::
+ サイドメニューまたはページフッターの「管理」>「ユーザー」をクリックすることで表示される。
+
+
+## 新規作成
+新規作成ボタンをクリックすることで[ユーザー作成画面](02.create.md)へ遷移する。
+
+## 検索機能
+検索欄にキーワードを入力することでユーザー名、Email、ePPN に対して部分一致検索ができる。
+::steps{level="4"}
+#### 検索欄に検索したいユーザー名、Email、ePPNのいずれかを入力する。
+::warning
+現在、ユーザー名のみ検索が可能である。
+::
+:: system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#userssearch-only-username)の users.search-only-username でユーザー名のみ検索にするかどうかを設定することができる。
+::
+#### エンターキーを押下して検索を実行する。
+#### 検索欄に入力した文字列を含むユーザーのみ一覧に表示される。
+
+::
+
+## フィルター機能
+::warning
+現在、ロールとグループのフィルターを同時に使用することができない。
+::
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#usersfilter-by-both-role-group)の users.filter-by-both-role-group でフィルターを同時に使用可能にすることができる。
+::
+::warning
+現在、最終更新日によるフィルターは使用することができない。
+::
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#usersfilter-by-last-modified)の users.filter-by-last-modified で最終更新日フィルターを使用可能にすることができる。
+::
+::steps{level="4"}
+#### フィルターボタンを押下する。
+
+#### フィルター項目のプルダウンが表示される。
+
+
+#### プルダウン内の項目を選択する。
+
+
+#### 選択したフィルター条件に合致するユーザーのみ一覧に表示される。
+
+
+::
+
+## ユーザー情報
+各ユーザーの情報を表示する
+- ユーザー名をクリックすると[ユーザー詳細画面](03.detail.md)に移動する。
+- カラム名をクリックすることで昇順・降順の切り替えができる。
+::warning
+現在、ソート機能は利用することができない。
+::
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#userssort-columns)の users.sort-columns でソートを許可するかどうかを設定することができる。
+::
+- ユーザーが存在しない場合ユーザーが存在しない旨のメッセージと再読み込みボタンが表示される。
+
+
+#### 表示件数の切り替え
+表示件数プルダウンから1ページに表示される件数を変更することができる。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#pagesizeusers)で設定した値に応じて、表示件数の切り替えの選択肢が表示される。
+::
+
+
+#### 表示項目の切り替え
+テーブル表示の列の表示/非表示を切り替えることができる。
+ ユーザー名は必ず表示される。
+
+
+#### ページ切り替え
+一覧下部のページネーションから表示するユーザーのページを切り替えることができる。
+
+## アクションメニュー
+「ユーザーIDをコピー」、「ePPNをコピー」、「詳細をみる」を選択することができる。
+::repository-admin-view
+::steps{level="4"}
+#### アクションボタンをクリックする。
+
+
+#### 「ユーザーIDをコピー」を選択した場合 ユーザーID がクリップボードにコピーされる。
+
+
+#### 「ePPNをコピー」を選択した場合 ePPN がクリップボードにコピーされる。
+
+
+#### 「詳細をみる」を選択した場合 [ユーザー詳細画面](03.detail.md)へ遷移する。
+::
+::
+
+## ユーザー操作
+複数のユーザーをまとめて操作することができる。
+
+#### ユーザーエクスポート
+::steps{level="4"}
+#### エクスポートしたいユーザーのチェックボックスにチェックを入れる。
+
+
+#### 画面右上の「選択したユーザーへのアクション」ボタンをクリック
+#### ユーザーエクスポートを選択
+
+
+#### エクスポート確認ダイアログが表示される。
+
+
+#### ダイアログ内の「エクスポート」ボタンをクリックすると選択したユーザーがエクスポートされる。
+
+
+::
+
+#### グループに追加
+::steps{level="4"}
+#### グループに追加したいユーザーのチェックボックスにチェックを入れる。
+
+
+#### 画面右上の「選択したユーザーへのアクション」ボタンをクリック
+#### グループに追加を選択
+
+
+#### グループ追加確認ダイアログが表示される。
+
+
+#### 追加するグループを選択
+
+
+#### ダイアログ内の「追加」ボタンをクリックすると選択したユーザーがグループに追加される。
+
+::
+
+#### グループから除外
+::steps{level="4"}
+#### グループから除外したいユーザーのチェックボックスにチェックを入れる。
+
+
+#### 画面右上の「選択したユーザーへのアクション」ボタンをクリック
+#### グループから除外を選択
+
+
+#### グループ除外確認ダイアログが表示される。
+
+
+#### 除外するグループを選択
+
+
+#### ダイアログ内の「除外」ボタンをクリックすると選択したユーザーがグループから除外される。
+
+::
+## アップロード
+ファイルをアップロードしてユーザーの作成・編集・削除をおこなうことができる。
+::warning
+現在、ファイルのアップロードによる一括操作機能は利用することができない。
+::
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#usersfile-upload)の users.file-upload でファイルのアップロードによる一括操作機能を有効にすることができる。
+一括操作機能を有効にした際はアップロード履歴も表示されるように history.upload の設定も合わせて行う必要がある。
+::
+::steps{level="4"}
+#### 画面上部の「アップロード」ボタンをクリックする。
+
+
+#### [ユーザー一括操作画面](03.bulk.md)へ遷移する。
+::
diff --git a/docs/content/05.manual/05.users/02.create.md b/docs/content/05.manual/05.users/02.create.md
new file mode 100644
index 00000000..83fe85b1
--- /dev/null
+++ b/docs/content/05.manual/05.users/02.create.md
@@ -0,0 +1,67 @@
+---
+title: ユーザー作成
+description: ユーザーの作成をおこなうことができる。
+---
+## 概要
+自身の管理するリポジトリ内のユーザーの作成を行うことができる
+::system-admin-only
+システム管理者はすべてのユーザーの作成を行うことができる
+システム管理者はユーザーにシステム管理者権限を付与できる。
+::
+[ユーザー一覧画面](01.summary.md)で「新規作成」ボタンをクリックすると、ユーザー作成画面が表示され作成を行うことができる。
+
+## 表示内容
+- ユーザー名、eppn、メールアドレス、優先言語、所属リポジトリと権限、所属グループの入力欄が表示される。
+- 複数選択可能な値は入力欄の上に追加ボタンが表示される。
+- 追加ボタンをクリックすると、同じ入力欄が追加される。
+
+
+## 作成手順
+::steps{level="4"}
+#### ユーザー名を入力する。
+
+
+#### eppn を入力する。
+ - 複数入力したい場合は追加ボタンをクリックすることで入力欄が追加される。
+
+
+#### email を入力する。
+ - 複数入力したい場合は追加ボタンをクリックすることで入力欄が追加される。
+
+
+#### 優先言語を選択する。
+
+
+#### 所属するリポジトリと権限を設定する。
+
+
+#### 所属するグループを選択する。
+ - 複数選択する場合は追加ボタンをクリックすることで入力欄が追加される。
+
+
+#### すべての入力が終わったら「保存」ボタンをクリックする。
+ ::warning
+ 一度作成すると所属するリポジトリとグループ以外は変更することができない。
+ ::
+#### ユーザーが作成される。
+
+
+#### 一覧画面へ遷移する。
+#### 作成をキャンセルする場合は「取り消し」ボタンをクリックする。
+#### 一覧画面へ遷移する。
+::
+
+::system-admin-only
+## システム管理者権限付与手順
+::steps{level="4"}
+#### ユーザー作成画面で基本情報を入力する。
+#### 「特権を付与する」を選択する。
+
+
+#### ユーザーにシステム管理者権限が付与される。
+#### 所属するリポジトリと権限が選択できなくなる。
+
+
+#### 保存ボタンをクリックしてユーザーを作成する。
+::
+::
diff --git a/docs/content/05.manual/05.users/03.detail.md b/docs/content/05.manual/05.users/03.detail.md
new file mode 100644
index 00000000..c970fed5
--- /dev/null
+++ b/docs/content/05.manual/05.users/03.detail.md
@@ -0,0 +1,31 @@
+---
+title: ユーザー詳細
+description: ユーザー詳細情報の確認と編集をおこなうことができる。
+---
+
+## 概要
+- 自身の管理するリポジトリ内のユーザーの編集を行うことができる
+- [ユーザー一覧画面](01.summary.md)で編集したいユーザー名をクリック、またはアクションメニューの「詳細をみる」を選択すると、ユーザー編集画面が表示され編集を行うことができる。
+
+## 表示内容
+
+
+- ユーザーID、ユーザー名、eppn、メールアドレス、所属リポジトリと権限、所属グループが表示される。
+
+
+- 各項目の隣にコピーアイコンが表示されクリックすることでユーザーID等がクリップボードにコピーされる。
+
+## ユーザー編集
+ユーザーの編集を行うことができる
+
+::steps{level="4"}
+#### 所属リポジトリと権限、所属グループの編集を行う。
+ その他の項目は編集できない。
+
+ 自分自身を編集する場合はログアウトされる
+
+
+#### すべての入力が終わったら「更新」ボタンをクリックする。
+#### ユーザーが更新される。
+::
+
diff --git a/docs/content/05.manual/05.users/04.bulk.md b/docs/content/05.manual/05.users/04.bulk.md
new file mode 100644
index 00000000..4d1e8be1
--- /dev/null
+++ b/docs/content/05.manual/05.users/04.bulk.md
@@ -0,0 +1,60 @@
+---
+title: ユーザー一括操作
+description: ファイルをアップロードしてユーザーの作成・編集・削除をおこなうことができる。
+---
+
+## 概要
+- 自身の管理するリポジトリ一つを対象にファイルをアップロードしてユーザーを一括操作することができる。
+::warning
+現在、ファイルアップロードによる一括操作機能は使用することができない。
+::
+
+## ファイルアップロードステップ
+一括操作を行うファイルをアップロードする。
+ ステップ表示エリアに現在のステップがハイライトして表示される。
+
+
+### 操作手順
+::steps{level="4"}
+#### プルダウンをクリックし操作を行いたいリポジトリを選択する。
+
+
+#### csv,tsv,xlsx のいずれかの形式のファイルにてユーザー情報を準備する。
+ - 異なる形式の場合はエラーが表示される。
+
+
+#### ファイルをドラッグアンドドロップ、またはクリックして選択する。
+#### 「次へ」ボタンをクリックしファイルの検証がを開始する。
+ リポジトリの選択と正しいファイル形式のファイルが選択されると「次へ」ボタンが有効化される。
+#### 検証ステップへ進む。
+::
+
+## 検証ステップ
+アップロードしたファイルの内容を検証する。
+
+::steps{level="4"}
+#### アップロードしたファイルの内容が表示される。
+表示件数プルダウンから1ページに表示される件数を変更することができる。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#pagesizebulks)で設定した値に応じて、表示件数の切り替えの選択肢が表示される。
+::
+#### 各ユーザーの操作内容(作成・編集)やエラーがある場合はエラー内容が表示される。
+#### ファイルに含まれていないユーザーの一覧が表示される。
+#### ファイルに含まれていないユーザーのうち削除したいユーザーを選択する。
+#### 「次へ」ボタンをクリックしユーザーの一括操作を開始する。
+ エラーがない場合「次へ」ボタンが有効化される。
+#### 完了ステップへ進む。
+::
+
+## 完了ステップ
+アップロードしたファイルの内容をもとにユーザーの作成・編集・削除の実行結果を表示する。
+
+::steps{level="4"}
+#### アップロードが実行される。
+#### アップロード開始時間、終了時間、実行者、アップロードファイル名、ダウンロードボタンが表示される。
+#### 実行結果として作成・編集・削除・エラーの件数と各ユーザーの操作内容が表示される。
+表示件数プルダウンから1ページに表示される件数を変更することができる。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#pagesizebulks)で設定した値に応じて、表示件数の切り替えの選択肢が表示される。
+::
+::
diff --git a/docs/content/05.manual/06.history/.navigation.yml b/docs/content/05.manual/06.history/.navigation.yml
new file mode 100644
index 00000000..def66b42
--- /dev/null
+++ b/docs/content/05.manual/06.history/.navigation.yml
@@ -0,0 +1 @@
+title: 履歴管理機能
diff --git a/docs/content/05.manual/06.history/01.summary.md b/docs/content/05.manual/06.history/01.summary.md
new file mode 100644
index 00000000..54ae3401
--- /dev/null
+++ b/docs/content/05.manual/06.history/01.summary.md
@@ -0,0 +1,81 @@
+---
+title: 履歴確認
+description: ファイルのダウンロード・アップロード履歴を確認することができる。
+---
+## 概要
+ユーザーのダウンロード履歴やアップロード履歴を確認することができる。
+::system-admin-only
+システム管理者は履歴の公開設定を切り替えることができる。
+::
+サイドメニューまたはページフッターの「履歴」をクリックすることで表示される。
+
+::warning
+現在、ファイルのアップロードによる一括操作機能が制限された状態のため、アップロード履歴は表示されない。
+::
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#historyupload)の history.upload でアップロード履歴を表示することができる。
+アップロード履歴を表示する際は users.file-upload の設定でファイルのアップロードによる一括操作の有効化と合わせて行う必要がある。
+::
+
+## ダウンロード履歴
+ダウンロード履歴画面では、ユーザー情報をダウンロードした履歴を確認することができる。
+タブで「ダウンロード履歴」と「アップロード履歴」を切り替えることができる。
+#### 表示内容
+
+
+- 自身の管理するリポジトリに対するダウンロード履歴一覧が表示される。
+- 一覧には、ダウンロード日時、実行ユーザー、グループ数、ユーザー数、再ダウンロードボタンが表示される。
+- 実行ユーザーの隣に再ダウンロード回数が表示される。
+- 折りたたみをクリックすると再ダウンロードの履歴が表示される。
+ - 再ダウンロード履歴には、再ダウンロード日時と再ダウンロードを実行したユーザーが表示される。
+- 再ダウンロードボタンをクリックすると、ダウンロードされたファイルを再度ダウンロードすることができる。
+ - ファイルが保存されていない場合は期限切れと表示される。
+
+- ダウンロード日時カラムをクリックするとダウンロード日時でソートを行うことができる。
+- アクションボタン
+
+
+## アップロード履歴
+アップロード履歴画面では、一括操作機能でアップロードした履歴を確認できる。
+タブで「ダウンロード履歴」と「アップロード履歴」を切り替えることができる。
+
+#### 表示内容
+- 自身の管理するリポジトリに対するアップロード履歴一覧が表示される。
+- 一覧には、アップロード日時、実行ユーザー、グループ数、ユーザー数、ステータス、アクションボタンが表示される。
+- 実行ユーザーの隣に再アップロード回数が表示される。
+- アップロード日時カラムをクリックするとアップロード日時でソートを行うことができる。
+- アクションボタンをクリックし、「詳細を見る」を選択すると[アップロード詳細画面](../05.users/04.bulk.md)が表示される。
+
+## フィルター機能
+::steps{level="4"}
+#### 実行日時フィルターではダウンロード日時で絞り込みを行うことができる。
+ - フィルターをクリックするとカレンダーが表示され、開始日と終了日を選択することで絞り込みができる。
+#### 実行ユーザーフィルターではダウンロードを実行したユーザーで絞り込みを行うことができる。
+ - 一覧に存在する実行ユーザーが選択肢として表示され、表示したい実行ユーザーを選択することで絞り込みができる。
+#### 対象リポジトリフィルターではダウンロード対象のリポジトリで絞り込みを行うことができる。
+ - 一覧に存在する対象リポジトリが選択肢として表示され、表示したい対象リポジトリを選択することで絞り込みができる。
+#### 対象グループフィルターではダウンロード対象のグループで絞り込みを行うことができる。
+ - 一覧に存在する対象グループが選択肢として表示され、表示したい対象グループを選択することで絞り込みができる。
+#### 対象ユーザーフィルターではダウンロード対象のユーザーで絞り込みを行うことができる。
+ - 一覧に存在する対象ユーザーが選択肢として表示され、表示したい対象ユーザーを選択することで絞り込みができる。
+#### リセットボタンをクリックすると、すべてのフィルターが解除される。
+::
+
+## 表示件数の切り替え
+表示件数の切り替え機能では、1ページあたりの表示件数を切り替えることができる。
+::system-admin-only
+[アプリケーション設定値](../08.config/01.app-config.md#pagesizebulks)で設定した値に応じて、表示件数の切り替えの選択肢が表示される。
+::
+
+::system-admin-only
+## 公開設定の切り替え手順
+::steps{level="4"}
+#### 公開設定を切り替えたい履歴のアクションボタンをクリックする。
+
+
+#### 「公開にする」または「非公開にする」ボタンをクリックする。
+
+#### 履歴の公開設定が切り替わる。
+
+::
+::
diff --git a/docs/content/05.manual/07.cache/.navigation.yml b/docs/content/05.manual/07.cache/.navigation.yml
new file mode 100644
index 00000000..a7e6c59c
--- /dev/null
+++ b/docs/content/05.manual/07.cache/.navigation.yml
@@ -0,0 +1,2 @@
+title: キャッシュ DB 管理機能
+system-admin-only: true
diff --git a/docs/content/05.manual/07.cache/01.cache-db.md b/docs/content/05.manual/07.cache/01.cache-db.md
new file mode 100644
index 00000000..4f142424
--- /dev/null
+++ b/docs/content/05.manual/07.cache/01.cache-db.md
@@ -0,0 +1,43 @@
+---
+title: キャッシュ DB 管理
+description: キャッシュ DB の更新を実行できる。
+---
+
+## 概要
+リポジトリのキャッシュ DB の更新日時の確認と更新の実行をすることができる。
+
+## 表示内容
+- キャッシュ DB 管理画面では、更新が実行中でなければリポジトリ名、URL、キャッシュ DB 更新日時を表示する。
+- 更新が実行中の場合は更新中画面として現在更新が行われている件数と進捗を表示する。
+
+
+## 検索機能
+検索欄にキーワードを入力することでリポジトリ名,URL に対して部分一致検索ができる。
+::steps{level="4"}
+#### 検索欄に検索したいリポジトリの ID、リポジトリ名、URL のいずれかを入力する。
+#### エンターキーを押下して検索を実行する。
+#### 検索欄に入力した文字列を含むリポジトリのみ一覧に表示される。
+::
+## フィルター機能
+::steps{level="4"}
+#### フィルタープルダウンをクリックする。
+#### キャッシュあり、キャッシュなしのいずれかまたは両方を選択する。
+#### 選択したフィルター条件に合致するリポジトリのみ一覧に表示される。
+::
+## キャッシュ DB 更新
+キャッシュ DB の更新には更新するリポジトリを選択して実行する方法と、全リポジトリを一括で更新する方法がある。
+
+#### 指定リポジトリのキャッシュ DB 更新
+::steps{level="4"}
+#### 更新したいリポジトリのチェックボックスにチェックを入れる。
+#### 画面右上の「選択したリポジトリを更新」ボタンをクリックする。
+#### キャッシュ DB 更新確認ダイアログが表示される。
+#### ダイアログ内の「更新」ボタンをクリックすると選択したリポジトリのキャッシュ DB 更新が実行され更新中画面に切り替わる。
+::
+
+#### 全リポジトリのキャッシュ DB 一括更新
+::steps{level="4"}
+#### 画面右上の「全リポジトリを更新」ボタンをクリックする。
+#### キャッシュ DB 更新確認ダイアログが表示される。
+#### ダイアログ内の「更新」ボタンをクリックすると全リポジトリのキャッシュ DB 更新が実行され更新中画面に切り替わる。
+::
diff --git a/docs/content/05.manual/08.config/.navigation.yml b/docs/content/05.manual/08.config/.navigation.yml
new file mode 100644
index 00000000..17dbe141
--- /dev/null
+++ b/docs/content/05.manual/08.config/.navigation.yml
@@ -0,0 +1,2 @@
+title: 設定値
+system-admin-only: true
diff --git a/docs/content/05.manual/08.config/01.app-config.md b/docs/content/05.manual/08.config/01.app-config.md
new file mode 100644
index 00000000..ecd3ddf8
--- /dev/null
+++ b/docs/content/05.manual/08.config/01.app-config.md
@@ -0,0 +1,160 @@
+---
+title: アプリケーション設定値
+description: アプリケーションの設定値を管理することができる。
+---
+
+## 概要
+アプリケーション設定値について説明する。
+configs/app.config.ts で定義されている
+
+## serverName
+当アプリケーションのサーバー名を指定する。URLの生成などに使用される。
+
+## baseURL
+当アプリケーションのベースURLを指定する。
+[serverName](#servername) と組み合わせて `https://${serverName}` のように指定することが想定される。
+
+## header
+ヘッダーに関する設定値
+
+#### serviceLogo
+ヘッダーに表示する[ロゴ画像](../02.login/02.common.md#ロゴ)のファイルパスを指定する。
+public 直下に画像を配置し /logo.png のように指定することが想定される
+
+#### serviceAltName
+ロゴ画像の代替テキストを指定する。
+ロゴ画像が表示できない場合に表示される。
+
+#### userManualURL
+当マニュアルのURLを指定する。
+指定した場合、[ユーザーメニュー](../02.login/02.common.md#ユーザーボタン)に「ユーザーマニュアル」へのリンクが表示される。
+
+#### globalSearch.limit
+[横断検索](../02.login/02.common.md#横断検索)の検索結果の最大表示件数を指定する。
+リポジトリ、グループ、ユーザーがそれぞれ最大件数分表示される。
+
+## table
+各一覧画面の表に関する設定値
+
+#### pageSize.repositories
+リポジトリ一覧の[表示件数の切り替え](../03.repositories/01.summary.md#表示件数の切り替え)の選択肢を指定する。選択肢は配列で指定する。
+
+#### pageSize.groups
+group一覧の[表示件数の切り替え](../04.groups/01.summary.md#表示件数の切り替え)の選択肢を指定する。選択肢は配列で指定する。
+
+#### pageSize.users
+ユーザー一覧の[表示件数の切り替え](../05.users/01.summary.md#表示件数の切り替え)の選択肢を指定する。選択肢は配列で指定する。
+
+#### pageSize.history
+履歴参照の[表示件数の切り替え](../06.history/01.summary.md#表示件数の切り替え)の選択肢を指定する。選択肢は配列で指定する。
+
+#### pageSize.bulks
+ユーザー一括操作の[検証ステップ](../05.users/04.bulk.md#検証ステップ)および[完了ステップ](../05.users/04.bulk.md#完了ステップ)で表示件数の切り替えの選択肢を指定する。選択肢は配列で指定する。
+
+
+## repositories
+リポジトリに関する設定値
+
+#### maxUrlLength
+サービス URL に設定可能な最大値を指定する。
+グループ ID の上限からプレフィックス、サフィックス、ユーザー定義可能な最低限の長さを引いたものを想定している。
+
+## groups
+グループに関する設定値
+
+#### maxIdLength
+グループ ID に使用するユーザー定義の最大値を指定する。
+実際のグループ ID の上限からプレフィックス、サフィックス、リポジトリ ID の長さを引いたものを想定している。
+
+## polling
+タスクの実行状況確認のポーリングに関する設定値
+
+#### interval
+タスクの実行状況を取得する間隔を指定する。
+単位はミリ秒である。
+
+#### maxAttempts
+タスクの実行状況を取得する最大回数を指定する。
+これを超えた場合はタイムアウトエラーがトーストで表示される
+
+## wayf
+埋め込みDSに関する設定値
+
+#### URL
+
+#### jsURL
+
+#### spEntityID
+
+#### spHandlerURL
+
+#### returnURL
+
+#### mostUsedIdps
+
+#### hideCategories
+
+#### unhideIdps
+
+#### hideIdps
+
+#### additionalIdPs
+
+## features
+各機能の使用を許可するかどうかの設定値
+mAP Core API が期待通りに動作しないことによる一時的な措置であり、将来的には削除される予定である。
+
+#### repositories.server-search
+リポジトリ名,URL,EntityIDのいずれかで検索を許可するかどうかを指定する。
+- trueにすると,リポジトリ一覧画面の検索欄,グループ一覧,ユーザー一覧のフィルターおよびグループ作成,ユーザー作成でリポジトリの選択肢をサーバー側で検索する
+- falseにすると,リポジトリ一覧画面の検索欄,グループ一覧,ユーザー一覧のフィルターおよびグループ作成,ユーザー作成でリポジトリの選択肢をブラウザ側で検索する
+そのためにページの表示件数にかかわらず,リポジトリの全件を取得する
+- 現状は false を想定している。
+
+#### repositories.sort-columns
+カラムのソートを許可するかどうか
+- trueにすると,リポジトリ一覧のカラムヘッダをクリックすると昇順・降順でソートできるようになる.
+- falseにすると,カラムヘッダがボタンではなくなりクリックしてもソートされない アイコンも非表示になる.
+- 現状は false を想定している。
+
+#### groups.sort-columns
+カラムのソートを許可するかどうか
+- trueにすると,グループ一覧のカラムヘッダをクリックすると昇順・降順でソートできるようになる.
+- falseにすると,カラムヘッダがボタンではなくなりクリックしてもソートされない アイコンも非表示になる.
+- 現状は false を想定している。
+
+#### users.filter-by-both-role-group
+ユーザー一覧でロールとグループの両方でフィルタリングを許可するかどうか
+- trueにすると,ユーザー一覧のフィルタリングでロールとグループの両方を選択できるようになる.
+- falseにすると,ロールとグループのどちらか一方を選択すると他方が無効化されホバーで警告文が表示される。
+- 現状は false を想定している。
+
+#### users.filter-by-last-modified
+ユーザー一覧で最終更新日時でフィルタリングを許可するかどうか
+- trueにすると,ユーザー一覧のフィルタリングで最終更新日時を選択できるようになる.
+- falseにすると,最終更新日時のフィルタリングが無効化されホバーで警告文が表示される.
+- 現状は false を想定している。
+
+#### users.search-only-username
+ユーザー一覧の検索をユーザー名のみにするかどうか
+- trueにすると,ユーザー一覧の検索はユーザー名のみで行われる.
+- falseにすると,ユーザー一覧の検索はユーザー名,メールアドレス,ePPNにまたがって行われる.
+- 現状は true を想定している。
+
+#### users.sort-columns
+カラムのソートを許可するかどうか
+- trueにすると,ユーザー一覧のカラムヘッダをクリックすると昇順・降順でソートできるようになる.
+- falseにすると,カラムヘッダがボタンではなくなりクリックしてもソートされない アイコンも非表示になる.
+- 現状は false を想定している。
+
+#### users.file-upload
+アップロードボタンを表示するかどうか
+- trueにすると,ユーザー一覧のアップロードボタンが表示される.
+- falseにすると,アップロードボタンが非表示になる.
+- 現状は false を想定している。
+
+#### history.upload
+アップロード履歴タブを表示するかどうか
+- trueにすると,履歴一覧のアップロード履歴タブが表示される.
+- falseにすると,アップロード履歴タブが非表示になる.
+- 現状は false を想定している。
diff --git a/docs/content/05.manual/08.config/02.server-config.md b/docs/content/05.manual/08.config/02.server-config.md
new file mode 100644
index 00000000..2ea3dfd8
--- /dev/null
+++ b/docs/content/05.manual/08.config/02.server-config.md
@@ -0,0 +1,265 @@
+---
+title: サーバー設定値
+description: サーバーの設定値を管理することができる。
+---
+
+## 概要
+サーバー設定値について説明する。
+configs/server.config.toml で定義されている。
+この値をもとに[RuntimeConfig](../../01.detailed/02.foundation/02.config.md#RuntimeConfig)が生成される。
+
+## server_name
+当サービスのサーバーのホスト名を指定する。
+
+## secret_key
+暗号化用キーを指定する。
+
+## [log]
+ログに関する設定値
+
+#### level
+ログレベルを指定する。
+"DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL" のいずれかを指定する。
+
+#### format
+ログのフォーマットを指定する。
+指定しない場合デフォルトのフォーマットが使用される。
+
+#### datefmt
+ログのタイムスタンプのフォーマットを指定する。
+指定しない場合デフォルトのフォーマットが使用される。
+
+## [session]
+ログインセッションに関する設定値
+
+#### strategy
+ログインセッション時間をスライディングセッションにするかどうかを指定する。
+"absolute", "sliding" から指定できる。
+"absolute"を指定した場合は固定化され"sliding"を指定した場合は API リクエスト時セッション時間が更新される。
+
+#### sliding_lifetime
+スライディングセッションのライフタイムを指定する。
+指定しない場合はデフォルトの1時間が使用される。
+
+#### absolute_lifetime
+スライディングセッションの最大時間を指定する。
+この時間を超えると強制的にログアウトされる。
+指定しない場合はデフォルトの24時間が使用される。
+
+## [api]
+API リクエストに関する設定値
+
+#### max_upload_size
+リクエストに含められるファイルのサイズ上限を指定する。
+単位はバイトである。
+指定しない場合はデフォルトの 10485760 (10 MB)が使用される
+
+## [storage]
+ストレージに関する設定値
+
+#### type
+ストレージのタイプ
+"local"を想定
+
+## [storage.local]
+ローカルストレージに関する設定値
+
+#### temporary
+ユーザー一括操作の際に使用する一時保存用のディレクトリを指定する。
+
+#### storage
+アップロード/ダウンロードされたファイルを保存するディレクトリを指定する。
+
+## [sp]
+SPに関する設定値
+
+#### connector_id
+当アプリケーションの SP コネクタ ID を指定する。
+
+#### entity_id
+当アプリケーションの EntityID を指定する。
+
+#### crt
+当アプリケーションの SP の 証明書ファイルのパスを指定する。
+
+#### key
+当アプリケーションの SP の 秘密鍵ファイルのパスを指定する。
+
+## [repositories]
+リポジトリに関する設定値
+
+#### max_url_length
+サービス URL に設定可能な最大値を指定する。
+グループ ID の上限からプレフィックス、サフィックス、ユーザー定義可能な最低限の長さを引いたものを想定している。
+
+## [repositories.id_patterns]
+リポジトリ ID と SP コネクタのパターンの関係に関する設定値
+
+#### sp_connector
+SP コネクタの ID パターンを指定する。
+
+## [groups]
+グループに関する設定値
+
+#### max_id_length
+グループ ID に使用するユーザー定義の最大値を指定する。
+実際のグループ ID の上限からプレフィックス、サフィックス、リポジトリ ID の長さを引いたものを想定している。
+
+## [groups.id_patterns]
+グループ ID のパターンに関する設定値
+
+#### system_admin
+システム管理者の ID を指定する。
+
+#### repository_admin
+リポジトリ管理者の ID パターンを指定する。
+
+#### community_admin
+コミュニティ管理者の ID パターンを指定する。
+
+#### contributor
+投稿者の ID パターンを指定する。
+
+#### general_user
+一般ユーザー の ID パターン を指定する。
+
+#### user_defined
+ユーザー定義のグループ ID パターンを指定する。
+
+## [groups.name_patterns]
+ロール用グループのグループ名のパターンに関する設定値
+
+#### system_admin
+システム管理者のグループ名を指定する。
+
+#### repository_admin
+リポジトリ管理者のグループ名パターンを指定する。
+
+#### community_admin
+コミュニティ管理者のグループ名パターンを指定する。
+
+#### contributor
+投稿者のグループ名パターンを指定する。
+
+#### general_user
+一般ユーザーのグループ名パターンを指定する。
+
+## [map_core]
+mAP Core API に関する設定値
+
+#### base_url
+mAP Core API の URL を指定する。
+
+#### timeout
+mAP Core API のリクエストのタイムアウト時間を指定する。
+
+#### update_strategy
+リソースの更新の際に用いるメソッドを指定する。
+"put","patch" が指定できる。
+
+#### user_editable
+ユーザー情報を編集できるかどうかを指定する。
+false の場合は所属グループと所属リポジトリおよびロールのみ編集することができる。
+
+## [postgres]
+postgreSQL データベースに関する設定値
+
+#### user
+データベースのユーザー名を指定する。
+
+#### password
+データベースのパスワードを指定する。
+
+#### host
+データベースのホスト名または IP アドレスを指定する。
+
+#### port
+データベースのポート番号を指定する。
+
+#### db
+データベース名を指定する。
+
+## [redis]
+Redis に関する設定値
+
+#### cache_type
+キャッシュのバックエンドのタイプを指定する。
+"RedisCache"、"RedisSentinelCache" が指定できる。
+
+#### socket_timeout
+Redis 接続のソケットタイムアウトを指定する。
+単位は秒である。
+
+#### cache_timeout
+キャッシュのデフォルトのタイムアウト時間を指定する。
+単位は秒である。
+mAP Core API のリクエスト結果をキャッシュする際に使用される。
+
+#### key_prefix
+キャッシュキーのプレフィックスを指定する。
+
+## [redis.database]
+Redis データベース番号に関する設定値
+
+#### app_cache
+アプリケーションキャッシュ用のデータベース番号を指定する。
+
+#### account_store
+アカウント情報を保存するデータベース番号を指定する。
+
+#### result_backend
+Celery の結果バックエンド用のデータベース番号を指定する。
+
+#### group_cache
+グループ情報キャッシュ用のデータベース番号を指定する。
+
+## [redis.single]
+cache_type が "RedisCache" の場合の Redis サーバーに関する設定値
+
+#### base_url
+単一の Redis サーバーの URL を指定する。
+
+## [redis.sentinel]
+cache_type が "RedisSentinelCache" の場合の Redis Sentinel に関する設定値
+
+#### master_name
+Redis Sentinel のマスターノードの名前を指定する。
+
+## [redis.sentinel.nodes]
+Redis Sentinel ノードのリストに関する設定値
+複数指定する場合は
+```
+[[redis.sentinel.nodes]]
+host = "redis-sentinel-node1"
+port = redis-sentinel-node1-port
+
+[[redis.sentinel.nodes]]
+host = "redis-sentinel-node2"
+port = redis-sentinel-node2-port
+```
+のように記述する
+
+#### host
+Redis Sentinel ノードのホスト名または IP アドレスを指定する。
+
+#### port
+Redis Sentinel ノードのポート番号を指定する。
+
+
+## [rabbitmq]
+RabbitMQ に関する設定値
+
+#### url
+RabbitMQ サーバーの URL を指定する。
+
+## [features]
+各機能の使用を許可するかどうかの設定値
+mAP Core API が期待通りに動作しないことによる一時的な措置であり、将来的には削除される予定である。
+
+#### search_only_username
+ユーザー検索をユーザー名のみに限定するかどうかを指定する。
+false の場合、ユーザー名、メールアドレス、または ePPN で検索できる。
+
+#### enable_bulk_operation
+mAP Core API の一括操作を有効または無効にするかを指定する。
+false の場合、一括操作は使用できなくなる。
diff --git a/docs/content/05.manual/index.md b/docs/content/05.manual/index.md
new file mode 100644
index 00000000..a8985ebd
--- /dev/null
+++ b/docs/content/05.manual/index.md
@@ -0,0 +1,31 @@
+---
+navigation:
+ title: はじめに
+title: マニュアル
+description: JAIRO Cloud Groups Manager操作マニュアル。
+headline: JAIRO Cloud Groups Manager
+---
+
+## 本書について
+本書は、JAIRO Cloud Groups Manager(以降、当システム)の利用者に向けたマニュアルである。
+
+## 対象範囲
+当システムは**リポジトリ管理者以上**の権限を持つユーザーを対象として機能を提供する。
+
+## 機能概要
+::repository-admin-view
+当システムでは、以下の主要な機能を提供する。
+- **リポジトリ管理**: リポジトリ情報の閲覧機能を提供する。
+- **グループ管理**: リポジトリに関連付けられたグループの管理機能を提供する。
+- **ユーザー管理**: リポジトリに関連付けられたユーザーの管理機能を提供する。
+- **履歴確認**: ユーザーのダウンロード履歴・アップロード履歴の確認機能を提供する。
+::
+::system-admin-only
+当システムでは、以下の主要な機能を提供する。
+- **リポジトリ管理**: リポジトリ情報の閲覧機能を提供する。
+- **グループ管理**: リポジトリに関連付けられたグループの管理機能を提供する。
+- **ユーザー管理**: リポジトリに関連付けられたユーザーの管理機能を提供する。
+- **履歴確認**: ユーザーのダウンロード履歴・アップロード履歴の確認機能を提供する。
+- **グループ情報キャッシュ機能**: WEKOで使用されるグループ情報のキャッシュを管理する機能を提供する。
+::
+
diff --git a/docs/content/index.md b/docs/content/index.md
new file mode 100644
index 00000000..56ed6910
--- /dev/null
+++ b/docs/content/index.md
@@ -0,0 +1,4 @@
+---
+title: Jairo Cloud Groups Manager ドキュメント
+description: JAIRO Cloud Groups Manager は、JAIRO Cloud のリポジトリ管理者が GakuNin Cloud Gateway 内のグループを管理するためのWebクライアントである。
+---
diff --git a/docs/nuxt.config.ts b/docs/nuxt.config.ts
new file mode 100644
index 00000000..bf906237
--- /dev/null
+++ b/docs/nuxt.config.ts
@@ -0,0 +1,35 @@
+// https://nuxt.com/docs/api/configuration/nuxt-config
+export default defineNuxtConfig({
+ modules: [
+ '@nuxt/ui',
+ '@nuxt/content',
+ ],
+
+ ssr: true,
+ devtools: { enabled: true },
+ css: ['~/assets/css/main.css'],
+
+ content: {
+ build: {
+ markdown: {
+ highlight: {
+ theme: {
+ default: 'github-light',
+ light: 'github-light',
+ dark: 'github-dark',
+ },
+ langs: ['python', 'json'],
+ },
+ },
+ },
+ },
+ devServer: { port: 4040 },
+
+ compatibilityDate: '2025-01-15',
+ nitro: {
+ prerender: {
+ crawlLinks: true,
+ routes: ['/'],
+ },
+ },
+})
diff --git a/docs/package.json b/docs/package.json
new file mode 100644
index 00000000..6bc1597e
--- /dev/null
+++ b/docs/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "docs",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "nuxt build",
+ "dev": "nuxt dev",
+ "generate": "nuxt generate",
+ "preview": "nuxt preview",
+ "link-check": "pnpx markdown-link-check ./content/"
+ },
+ "dependencies": {
+ "@nuxt/content": "^3.12.0",
+ "@nuxt/ui": "^4.5.1",
+ "nuxt": "^4.3.1",
+ "typescript": "^5.9.3"
+ },
+ "devDependencies": {
+ "better-sqlite3": "^12.5.0"
+ }
+}
diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico
new file mode 100644
index 00000000..18993ad9
Binary files /dev/null and b/docs/public/favicon.ico differ
diff --git a/docs/public/img/manual/2211.png b/docs/public/img/manual/2211.png
new file mode 100644
index 00000000..cb4724fa
Binary files /dev/null and b/docs/public/img/manual/2211.png differ
diff --git a/docs/public/img/manual/2212.png b/docs/public/img/manual/2212.png
new file mode 100644
index 00000000..601ecfa1
Binary files /dev/null and b/docs/public/img/manual/2212.png differ
diff --git a/docs/public/img/manual/2213.png b/docs/public/img/manual/2213.png
new file mode 100644
index 00000000..7d7dd33a
Binary files /dev/null and b/docs/public/img/manual/2213.png differ
diff --git a/docs/public/img/manual/2221.png b/docs/public/img/manual/2221.png
new file mode 100644
index 00000000..f45f5976
Binary files /dev/null and b/docs/public/img/manual/2221.png differ
diff --git a/docs/public/img/manual/2222.png b/docs/public/img/manual/2222.png
new file mode 100644
index 00000000..afd51dc2
Binary files /dev/null and b/docs/public/img/manual/2222.png differ
diff --git a/docs/public/img/manual/2231.png b/docs/public/img/manual/2231.png
new file mode 100644
index 00000000..92a6948b
Binary files /dev/null and b/docs/public/img/manual/2231.png differ
diff --git a/docs/public/img/manual/2232.png b/docs/public/img/manual/2232.png
new file mode 100644
index 00000000..6892c7d1
Binary files /dev/null and b/docs/public/img/manual/2232.png differ
diff --git a/docs/public/img/manual/3111.png b/docs/public/img/manual/3111.png
new file mode 100644
index 00000000..8c4b5a1e
Binary files /dev/null and b/docs/public/img/manual/3111.png differ
diff --git a/docs/public/img/manual/3112.png b/docs/public/img/manual/3112.png
new file mode 100644
index 00000000..decf80a6
Binary files /dev/null and b/docs/public/img/manual/3112.png differ
diff --git a/docs/public/img/manual/3121.png b/docs/public/img/manual/3121.png
new file mode 100644
index 00000000..ca12eb18
Binary files /dev/null and b/docs/public/img/manual/3121.png differ
diff --git a/docs/public/img/manual/3122.png b/docs/public/img/manual/3122.png
new file mode 100644
index 00000000..fdb50c5a
Binary files /dev/null and b/docs/public/img/manual/3122.png differ
diff --git a/docs/public/img/manual/3131.png b/docs/public/img/manual/3131.png
new file mode 100644
index 00000000..60ddfb1e
Binary files /dev/null and b/docs/public/img/manual/3131.png differ
diff --git a/docs/public/img/manual/3141.png b/docs/public/img/manual/3141.png
new file mode 100644
index 00000000..f15c41c4
Binary files /dev/null and b/docs/public/img/manual/3141.png differ
diff --git a/docs/public/img/manual/3142.png b/docs/public/img/manual/3142.png
new file mode 100644
index 00000000..0e5a0ac8
Binary files /dev/null and b/docs/public/img/manual/3142.png differ
diff --git a/docs/public/img/manual/3143.png b/docs/public/img/manual/3143.png
new file mode 100644
index 00000000..46ba0411
Binary files /dev/null and b/docs/public/img/manual/3143.png differ
diff --git a/docs/public/img/manual/3151.png b/docs/public/img/manual/3151.png
new file mode 100644
index 00000000..b906fbf3
Binary files /dev/null and b/docs/public/img/manual/3151.png differ
diff --git a/docs/public/img/manual/3152.png b/docs/public/img/manual/3152.png
new file mode 100644
index 00000000..ae629470
Binary files /dev/null and b/docs/public/img/manual/3152.png differ
diff --git a/docs/public/img/manual/3153.png b/docs/public/img/manual/3153.png
new file mode 100644
index 00000000..68c4595b
Binary files /dev/null and b/docs/public/img/manual/3153.png differ
diff --git a/docs/public/img/manual/3161.png b/docs/public/img/manual/3161.png
new file mode 100644
index 00000000..ebdb03b4
Binary files /dev/null and b/docs/public/img/manual/3161.png differ
diff --git a/docs/public/img/manual/3211.png b/docs/public/img/manual/3211.png
new file mode 100644
index 00000000..37db2b6f
Binary files /dev/null and b/docs/public/img/manual/3211.png differ
diff --git a/docs/public/img/manual/3221.png b/docs/public/img/manual/3221.png
new file mode 100644
index 00000000..e84b80ee
Binary files /dev/null and b/docs/public/img/manual/3221.png differ
diff --git a/docs/public/img/manual/3222.png b/docs/public/img/manual/3222.png
new file mode 100644
index 00000000..9488e003
Binary files /dev/null and b/docs/public/img/manual/3222.png differ
diff --git a/docs/public/img/manual/3223.png b/docs/public/img/manual/3223.png
new file mode 100644
index 00000000..e52a0fc6
Binary files /dev/null and b/docs/public/img/manual/3223.png differ
diff --git a/docs/public/img/manual/3224.png b/docs/public/img/manual/3224.png
new file mode 100644
index 00000000..f8d25162
Binary files /dev/null and b/docs/public/img/manual/3224.png differ
diff --git a/docs/public/img/manual/3311.png b/docs/public/img/manual/3311.png
new file mode 100644
index 00000000..234c7713
Binary files /dev/null and b/docs/public/img/manual/3311.png differ
diff --git a/docs/public/img/manual/3312.png b/docs/public/img/manual/3312.png
new file mode 100644
index 00000000..9365ed86
Binary files /dev/null and b/docs/public/img/manual/3312.png differ
diff --git a/docs/public/img/manual/3332.png b/docs/public/img/manual/3332.png
new file mode 100644
index 00000000..450153b1
Binary files /dev/null and b/docs/public/img/manual/3332.png differ
diff --git a/docs/public/img/manual/3341.png b/docs/public/img/manual/3341.png
new file mode 100644
index 00000000..ac88799b
Binary files /dev/null and b/docs/public/img/manual/3341.png differ
diff --git a/docs/public/img/manual/3342.png b/docs/public/img/manual/3342.png
new file mode 100644
index 00000000..b22b0e65
Binary files /dev/null and b/docs/public/img/manual/3342.png differ
diff --git a/docs/public/img/manual/4111.png b/docs/public/img/manual/4111.png
new file mode 100644
index 00000000..5ebceb4f
Binary files /dev/null and b/docs/public/img/manual/4111.png differ
diff --git a/docs/public/img/manual/4121.png b/docs/public/img/manual/4121.png
new file mode 100644
index 00000000..91499206
Binary files /dev/null and b/docs/public/img/manual/4121.png differ
diff --git a/docs/public/img/manual/4131.png b/docs/public/img/manual/4131.png
new file mode 100644
index 00000000..ac4709cb
Binary files /dev/null and b/docs/public/img/manual/4131.png differ
diff --git a/docs/public/img/manual/4141.png b/docs/public/img/manual/4141.png
new file mode 100644
index 00000000..3cc94b9c
Binary files /dev/null and b/docs/public/img/manual/4141.png differ
diff --git a/docs/public/img/manual/4142.png b/docs/public/img/manual/4142.png
new file mode 100644
index 00000000..496172f1
Binary files /dev/null and b/docs/public/img/manual/4142.png differ
diff --git a/docs/public/img/manual/4143.png b/docs/public/img/manual/4143.png
new file mode 100644
index 00000000..ba4a5e84
Binary files /dev/null and b/docs/public/img/manual/4143.png differ
diff --git a/docs/public/img/manual/4152.png b/docs/public/img/manual/4152.png
new file mode 100644
index 00000000..21784d0e
Binary files /dev/null and b/docs/public/img/manual/4152.png differ
diff --git a/docs/public/img/manual/4153.png b/docs/public/img/manual/4153.png
new file mode 100644
index 00000000..2980b460
Binary files /dev/null and b/docs/public/img/manual/4153.png differ
diff --git a/docs/public/img/manual/4161.png b/docs/public/img/manual/4161.png
new file mode 100644
index 00000000..b1283154
Binary files /dev/null and b/docs/public/img/manual/4161.png differ
diff --git a/docs/public/img/manual/4162.png b/docs/public/img/manual/4162.png
new file mode 100644
index 00000000..3c6dd152
Binary files /dev/null and b/docs/public/img/manual/4162.png differ
diff --git a/docs/public/img/manual/4171.png b/docs/public/img/manual/4171.png
new file mode 100644
index 00000000..7e7243b0
Binary files /dev/null and b/docs/public/img/manual/4171.png differ
diff --git a/docs/public/img/manual/4172.png b/docs/public/img/manual/4172.png
new file mode 100644
index 00000000..6f1c6362
Binary files /dev/null and b/docs/public/img/manual/4172.png differ
diff --git a/docs/public/img/manual/4173.png b/docs/public/img/manual/4173.png
new file mode 100644
index 00000000..7d19e696
Binary files /dev/null and b/docs/public/img/manual/4173.png differ
diff --git a/docs/public/img/manual/4174.png b/docs/public/img/manual/4174.png
new file mode 100644
index 00000000..adf682c6
Binary files /dev/null and b/docs/public/img/manual/4174.png differ
diff --git a/docs/public/img/manual/4221.png b/docs/public/img/manual/4221.png
new file mode 100644
index 00000000..1835e5e5
Binary files /dev/null and b/docs/public/img/manual/4221.png differ
diff --git a/docs/public/img/manual/4231.png b/docs/public/img/manual/4231.png
new file mode 100644
index 00000000..c10bce22
Binary files /dev/null and b/docs/public/img/manual/4231.png differ
diff --git a/docs/public/img/manual/4232.png b/docs/public/img/manual/4232.png
new file mode 100644
index 00000000..d5bbe507
Binary files /dev/null and b/docs/public/img/manual/4232.png differ
diff --git a/docs/public/img/manual/4233.png b/docs/public/img/manual/4233.png
new file mode 100644
index 00000000..666e0f63
Binary files /dev/null and b/docs/public/img/manual/4233.png differ
diff --git a/docs/public/img/manual/4234.png b/docs/public/img/manual/4234.png
new file mode 100644
index 00000000..4bbccf21
Binary files /dev/null and b/docs/public/img/manual/4234.png differ
diff --git a/docs/public/img/manual/4235.png b/docs/public/img/manual/4235.png
new file mode 100644
index 00000000..b0dbab1f
Binary files /dev/null and b/docs/public/img/manual/4235.png differ
diff --git a/docs/public/img/manual/4321.png b/docs/public/img/manual/4321.png
new file mode 100644
index 00000000..65456a5c
Binary files /dev/null and b/docs/public/img/manual/4321.png differ
diff --git a/docs/public/img/manual/4331.png b/docs/public/img/manual/4331.png
new file mode 100644
index 00000000..47d6dd34
Binary files /dev/null and b/docs/public/img/manual/4331.png differ
diff --git a/docs/public/img/manual/4341.png b/docs/public/img/manual/4341.png
new file mode 100644
index 00000000..94c16330
Binary files /dev/null and b/docs/public/img/manual/4341.png differ
diff --git a/docs/public/img/manual/4342.png b/docs/public/img/manual/4342.png
new file mode 100644
index 00000000..f5ac2876
Binary files /dev/null and b/docs/public/img/manual/4342.png differ
diff --git a/docs/public/img/manual/4343.png b/docs/public/img/manual/4343.png
new file mode 100644
index 00000000..5a3ae2f0
Binary files /dev/null and b/docs/public/img/manual/4343.png differ
diff --git a/docs/public/img/manual/5111.png b/docs/public/img/manual/5111.png
new file mode 100644
index 00000000..9bbbb8c6
Binary files /dev/null and b/docs/public/img/manual/5111.png differ
diff --git a/docs/public/img/manual/5131.png b/docs/public/img/manual/5131.png
new file mode 100644
index 00000000..69734858
Binary files /dev/null and b/docs/public/img/manual/5131.png differ
diff --git a/docs/public/img/manual/5141.png b/docs/public/img/manual/5141.png
new file mode 100644
index 00000000..7da90114
Binary files /dev/null and b/docs/public/img/manual/5141.png differ
diff --git a/docs/public/img/manual/5142.png b/docs/public/img/manual/5142.png
new file mode 100644
index 00000000..73da4e7c
Binary files /dev/null and b/docs/public/img/manual/5142.png differ
diff --git a/docs/public/img/manual/5143.png b/docs/public/img/manual/5143.png
new file mode 100644
index 00000000..81892984
Binary files /dev/null and b/docs/public/img/manual/5143.png differ
diff --git a/docs/public/img/manual/5151.png b/docs/public/img/manual/5151.png
new file mode 100644
index 00000000..c7cbdf9e
Binary files /dev/null and b/docs/public/img/manual/5151.png differ
diff --git a/docs/public/img/manual/5152.png b/docs/public/img/manual/5152.png
new file mode 100644
index 00000000..92d46c2b
Binary files /dev/null and b/docs/public/img/manual/5152.png differ
diff --git a/docs/public/img/manual/5153.png b/docs/public/img/manual/5153.png
new file mode 100644
index 00000000..240cd639
Binary files /dev/null and b/docs/public/img/manual/5153.png differ
diff --git a/docs/public/img/manual/5161.png b/docs/public/img/manual/5161.png
new file mode 100644
index 00000000..ef5030dd
Binary files /dev/null and b/docs/public/img/manual/5161.png differ
diff --git a/docs/public/img/manual/5162.png b/docs/public/img/manual/5162.png
new file mode 100644
index 00000000..5267a454
Binary files /dev/null and b/docs/public/img/manual/5162.png differ
diff --git a/docs/public/img/manual/5163.png b/docs/public/img/manual/5163.png
new file mode 100644
index 00000000..c9f5c9d0
Binary files /dev/null and b/docs/public/img/manual/5163.png differ
diff --git a/docs/public/img/manual/5171.png b/docs/public/img/manual/5171.png
new file mode 100644
index 00000000..fad7f7bd
Binary files /dev/null and b/docs/public/img/manual/5171.png differ
diff --git a/docs/public/img/manual/5172.png b/docs/public/img/manual/5172.png
new file mode 100644
index 00000000..e139420d
Binary files /dev/null and b/docs/public/img/manual/5172.png differ
diff --git a/docs/public/img/manual/5175.png b/docs/public/img/manual/5175.png
new file mode 100644
index 00000000..60bfd357
Binary files /dev/null and b/docs/public/img/manual/5175.png differ
diff --git a/docs/public/img/manual/5176.png b/docs/public/img/manual/5176.png
new file mode 100644
index 00000000..499318a3
Binary files /dev/null and b/docs/public/img/manual/5176.png differ
diff --git a/docs/public/img/manual/5177.png b/docs/public/img/manual/5177.png
new file mode 100644
index 00000000..99b1fad5
Binary files /dev/null and b/docs/public/img/manual/5177.png differ
diff --git a/docs/public/img/manual/5178.png b/docs/public/img/manual/5178.png
new file mode 100644
index 00000000..1072ba4e
Binary files /dev/null and b/docs/public/img/manual/5178.png differ
diff --git a/docs/public/img/manual/5181.png b/docs/public/img/manual/5181.png
new file mode 100644
index 00000000..912b54d2
Binary files /dev/null and b/docs/public/img/manual/5181.png differ
diff --git a/docs/public/img/manual/5221.png b/docs/public/img/manual/5221.png
new file mode 100644
index 00000000..832d32d0
Binary files /dev/null and b/docs/public/img/manual/5221.png differ
diff --git a/docs/public/img/manual/5231.png b/docs/public/img/manual/5231.png
new file mode 100644
index 00000000..bdf4c21a
Binary files /dev/null and b/docs/public/img/manual/5231.png differ
diff --git a/docs/public/img/manual/5232.png b/docs/public/img/manual/5232.png
new file mode 100644
index 00000000..b855ca88
Binary files /dev/null and b/docs/public/img/manual/5232.png differ
diff --git a/docs/public/img/manual/5233.png b/docs/public/img/manual/5233.png
new file mode 100644
index 00000000..005c52d0
Binary files /dev/null and b/docs/public/img/manual/5233.png differ
diff --git a/docs/public/img/manual/5234.png b/docs/public/img/manual/5234.png
new file mode 100644
index 00000000..7cfd7194
Binary files /dev/null and b/docs/public/img/manual/5234.png differ
diff --git a/docs/public/img/manual/5235.png b/docs/public/img/manual/5235.png
new file mode 100644
index 00000000..5cdafc57
Binary files /dev/null and b/docs/public/img/manual/5235.png differ
diff --git a/docs/public/img/manual/5236.png b/docs/public/img/manual/5236.png
new file mode 100644
index 00000000..7b51e8f0
Binary files /dev/null and b/docs/public/img/manual/5236.png differ
diff --git a/docs/public/img/manual/5237.png b/docs/public/img/manual/5237.png
new file mode 100644
index 00000000..e00086b6
Binary files /dev/null and b/docs/public/img/manual/5237.png differ
diff --git a/docs/public/img/manual/5241.png b/docs/public/img/manual/5241.png
new file mode 100644
index 00000000..406f7954
Binary files /dev/null and b/docs/public/img/manual/5241.png differ
diff --git a/docs/public/img/manual/5242.png b/docs/public/img/manual/5242.png
new file mode 100644
index 00000000..614a3cb8
Binary files /dev/null and b/docs/public/img/manual/5242.png differ
diff --git a/docs/public/img/manual/6121.png b/docs/public/img/manual/6121.png
new file mode 100644
index 00000000..5f19db93
Binary files /dev/null and b/docs/public/img/manual/6121.png differ
diff --git a/docs/public/img/manual/6141.png b/docs/public/img/manual/6141.png
new file mode 100644
index 00000000..82896acf
Binary files /dev/null and b/docs/public/img/manual/6141.png differ
diff --git a/docs/public/img/manual/6142.png b/docs/public/img/manual/6142.png
new file mode 100644
index 00000000..1e3973e6
Binary files /dev/null and b/docs/public/img/manual/6142.png differ
diff --git a/docs/public/logo.png b/docs/public/logo.png
new file mode 100644
index 00000000..0f421286
Binary files /dev/null and b/docs/public/logo.png differ
diff --git a/docs/tsconfig.json b/docs/tsconfig.json
new file mode 100644
index 00000000..307b2134
--- /dev/null
+++ b/docs/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ // https://nuxt.com/docs/guide/concepts/typescript
+ "files": [],
+ "references": [
+ {
+ "path": "./.nuxt/tsconfig.app.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.server.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.shared.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.node.json"
+ }
+ ]
+}
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 5583af88..dac4b26f 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -69,6 +69,7 @@ export default withNuxt(
{
files: ['**/app/{pages,layouts}/**/*.vue', '**/app/{plugins,middleware}/**/*.ts'],
rules: {
+ 'vue/multi-word-component-names': 'off',
'unicorn/filename-case': ['error', { case: 'kebabCase' }],
},
},
diff --git a/nginx/Dockerfile b/nginx/Dockerfile
index d20ab9cc..e05b6041 100644
--- a/nginx/Dockerfile
+++ b/nginx/Dockerfile
@@ -1,8 +1,9 @@
# syntax=docker/dockerfile:1
-ARG NGINX_VERSION=1.29.4
-ARG NODE_VERSION=24.12
+ARG NGINX_VERSION=1.29.6
+ARG NODE_VERSION=24
ARG SHIB_MOD_VERSION=2.0.2
+ARG HEADERS_MORE_VERSION=0.37
# ==============================
# Build stage:
@@ -12,6 +13,7 @@ FROM debian:trixie-slim AS build
ARG NGINX_VERSION
ARG SHIB_MOD_VERSION
+ARG HEADERS_MORE_VERSION
WORKDIR /usr/src
RUN apt-get update && \
@@ -23,9 +25,13 @@ RUN wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \
tar xzf nginx-${NGINX_VERSION}.tar.gz
RUN wget https://github.com/nginx-shib/nginx-http-shibboleth/archive/v${SHIB_MOD_VERSION}.tar.gz && \
tar xzf v${SHIB_MOD_VERSION}.tar.gz
+RUN wget https://github.com/openresty/headers-more-nginx-module/archive/v${HEADERS_MORE_VERSION}.tar.gz && \
+ tar xzf v${HEADERS_MORE_VERSION}.tar.gz
WORKDIR /usr/src/nginx-${NGINX_VERSION}
-RUN ./configure --with-compat --add-dynamic-module=../nginx-http-shibboleth-${SHIB_MOD_VERSION} && \
+RUN ./configure --with-compat \
+ --add-dynamic-module=../nginx-http-shibboleth-${SHIB_MOD_VERSION} \
+ --add-dynamic-module=../headers-more-nginx-module-${HEADERS_MORE_VERSION} && \
make modules
@@ -69,6 +75,7 @@ RUN mkdir -p /var/run/shibboleth && \
# nginx-http-shibboleth module
COPY --from=build \
/usr/src/nginx-${NGINX_VERSION}/objs/ngx_http_shibboleth_module.so \
+ /usr/src/nginx-${NGINX_VERSION}/objs/ngx_http_headers_more_filter_module.so \
/etc/nginx/modules/
COPY nginx/supervisord.conf /etc/supervisord.conf
@@ -98,6 +105,9 @@ RUN chmod 644 /etc/shibboleth/server.crt /etc/shibboleth/server.key
RUN sed -i \
'1s|^|load_module modules/ngx_http_shibboleth_module.so;\n|' \
/etc/nginx/nginx.conf
+RUN sed -i \
+ '1s|^|load_module modules/ngx_http_headers_more_filter_module.so;\n|' \
+ /etc/nginx/nginx.conf
# ==============================
@@ -106,10 +116,17 @@ RUN sed -i \
# ==============================
FROM base AS dev
+RUN sed -i \
+ '1s|^|upstream app_server {\n server app:3000;\n}\n\n|' \
+ /etc/nginx/conf.d/default.conf
RUN sed -i \
'/# Application resources requests/,/# replace this for dev server/ \
s|app[.]inc|app.dev.inc|' \
/etc/nginx/conf.d/default.conf
+RUN sed -i \
+ '/# Application api requests/,/# replace this for dev server/ \
+ s|api[.]inc|api.dev.inc|' \
+ /etc/nginx/conf.d/default.conf
EXPOSE 80 443
diff --git a/nginx/attribute-map.inc.xml b/nginx/attribute-map.inc.xml
index 556267fd..86c96b02 100644
--- a/nginx/attribute-map.inc.xml
+++ b/nginx/attribute-map.inc.xml
@@ -1 +1,3 @@
+
+
diff --git a/nginx/conf.d/api.dev.inc b/nginx/conf.d/api.dev.inc
new file mode 100644
index 00000000..97cf3298
--- /dev/null
+++ b/nginx/conf.d/api.dev.inc
@@ -0,0 +1,23 @@
+# Proxy requests to the flask dev server
+# included by nginx.conf
+
+location /secure {
+ limit_except GET { deny all; }
+ shib_request /shibauthorizer;
+ shib_request_use_headers on;
+
+ proxy_pass http://api_server/api/auth/login;
+
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+}
+
+location /api/ {
+ proxy_pass http://api_server$request_uri;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+}
diff --git a/nginx/conf.d/api.inc b/nginx/conf.d/api.inc
new file mode 100644
index 00000000..9cb28e7b
--- /dev/null
+++ b/nginx/conf.d/api.inc
@@ -0,0 +1,35 @@
+# Proxy requests to the flask api server
+# included by nginx.conf
+
+location /secure {
+ limit_except GET { deny all; }
+ shib_request /shibauthorizer;
+ shib_request_use_headers on;
+
+ more_clear_input_headers 'EPPN' 'DisplayName' 'JaDisplayName' 'IsMemberOf';
+
+ uwsgi_pass api_server;
+ include uwsgi_params;
+
+ uwsgi_param Host $host;
+ uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
+ uwsgi_param X-Forwarded-Proto $scheme;
+
+ uwsgi_param SCRIPT_NAME "";
+ uwsgi_param PATH_INFO https://api_server/api/auth/login;
+ uwsgi_param QUERY_STRING $query_string;
+}
+
+location /api/ {
+ uwsgi_pass api_server;
+ include uwsgi_params;
+
+ uwsgi_param SCRIPT_NAME "";
+
+ uwsgi_param Host $host;
+ uwsgi_param X-Real-IP $remote_addr;
+ uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
+ uwsgi_param X-Forwarded-Proto $scheme;
+
+}
+
diff --git a/nginx/conf.d/default.conf b/nginx/conf.d/default.conf
index 8e3e93ca..932e54cc 100644
--- a/nginx/conf.d/default.conf
+++ b/nginx/conf.d/default.conf
@@ -1,7 +1,3 @@
-upstream app_server {
- server app:3000;
-}
-
upstream api_server {
server web:5050;
}
@@ -29,13 +25,8 @@ server {
include conf.d/shibboleth.inc;
# Application api requests
- location /api/ {
- proxy_pass http://api_server$request_uri;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
+ include conf.d/api.inc;
+ # replace this for dev server
# Application resources requests
include conf.d/app.inc;
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 331a2800..3982d426 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -3,12 +3,12 @@ export default defineNuxtConfig({
modules: [
'@nuxt/eslint',
'@nuxt/ui',
- '@nuxt/content',
'@pinia/nuxt',
'@nuxtjs/i18n',
'@nuxt/test-utils',
'@vueuse/nuxt',
],
+ ssr: false,
imports: {
dirs: ['~/types'],
@@ -23,11 +23,16 @@ export default defineNuxtConfig({
srcDir: 'src/app/',
- routeRules: {
- '/': { prerender: true },
- },
+ compatibilityDate: '2026-03-04',
+
+ vite: {
+ vue: {
+ features: {
+ optionsAPI: false,
+ },
+ },
- compatibilityDate: '2026-01-10',
+ },
eslint: {
config: {
@@ -45,6 +50,7 @@ export default defineNuxtConfig({
detectBrowserLanguage: {
fallbackLocale: 'ja',
},
+ langDir: 'locales',
restructureDir: 'src/app/i18n',
},
})
diff --git a/package.json b/package.json
index b55339b3..1b6fe8cc 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "jairocloud-groups-manager",
"private": true,
"type": "module",
- "version": "0.1.0",
+ "version": "1.0.0-alpha.1",
"description": "A web client for JAIRO Cloud repository administrators to manage groups in the GakuNin Cloud Gateway.",
"license": "MIT",
"author": {
@@ -16,36 +16,39 @@
"prepare": "husky",
"lint": "eslint .",
"typecheck": "nuxt typecheck",
+ "docs:dev": "pnpm -F docs dev",
+ "docs:link-check": "pnpm -F docs link-check",
+ "docs:generate": "pnpm -F docs generate",
"check-updates": "pnpx --package=npm-check-updates ncu"
},
"dependencies": {
- "@iconify-json/lucide": "^1.2.87",
- "@nuxt/content": "3.11.0",
- "@nuxt/ui": "^4.4.0",
- "@nuxtjs/i18n": "^10.2.1",
+ "@iconify-json/lucide": "^1.2.98",
+ "@nuxt/content": "^3.12.0",
+ "@nuxt/ui": "^4.5.1",
+ "@nuxtjs/i18n": "^10.2.3",
"@pinia/nuxt": "^0.11.3",
- "@vueuse/nuxt": "^14.2.0",
- "nuxt": "^4.3.0",
+ "@vueuse/nuxt": "^14.2.1",
+ "nuxt": "^4.4.2",
"pinia": "^3.0.4",
"scule": "^1.3.0"
},
"devDependencies": {
- "@commitlint/cli": "^20.4.0",
- "@commitlint/config-conventional": "^20.4.0",
- "@commitlint/types": "^20.4.0",
- "@nuxt/eslint": "^1.13.0",
- "@nuxt/test-utils": "3.23.0",
- "better-sqlite3": "^12.6.2",
- "eslint": "^9.39.2",
- "eslint-plugin-unicorn": "^62.0.0",
+ "@commitlint/cli": "^20.5.0",
+ "@commitlint/config-conventional": "^20.5.0",
+ "@commitlint/types": "^20.5.0",
+ "@nuxt/eslint": "^1.15.2",
+ "@nuxt/test-utils": "4.0.0",
+ "better-sqlite3": "^12.8.0",
+ "eslint": "^10.1.0",
+ "eslint-plugin-unicorn": "^63.0.0",
"husky": "^9.1.7",
"typescript": "^5.9.3",
- "vue-tsc": "^3.2.4"
+ "vue-tsc": "^3.2.6"
},
"engines": {
- "node": "^24.12.0",
- "pnpm": "^10.28.0",
+ "node": "^24.14.0",
+ "pnpm": "^10.32.0",
"npm": "please_use_pnpm_instead"
},
- "packageManager": "pnpm@10.28.2"
+ "packageManager": "pnpm@10.32.1"
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3b9ea5d9..ec0d5f05 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,57 +9,57 @@ importers:
.:
dependencies:
'@iconify-json/lucide':
- specifier: ^1.2.87
- version: 1.2.87
+ specifier: ^1.2.98
+ version: 1.2.98
'@nuxt/content':
- specifier: 3.11.0
- version: 3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1)
+ specifier: ^3.12.0
+ version: 3.12.0(better-sqlite3@12.8.0)(magicast@0.5.2)
'@nuxt/ui':
- specifier: ^4.4.0
- version: 4.4.0(@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(ioredis@5.9.2)(magicast@0.5.1)(tailwindcss@4.1.18)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))(yjs@13.6.28)(zod@3.25.76)
+ specifier: ^4.5.1
+ version: 4.5.1(@nuxt/content@3.12.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.0)(magicast@0.5.2)(tailwindcss@4.2.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))(yjs@13.6.28)(zod@3.25.76)
'@nuxtjs/i18n':
- specifier: ^10.2.1
- version: 10.2.1(@vue/compiler-dom@3.5.27)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(rollup@4.57.1)(vue@3.5.27(typescript@5.9.3))
+ specifier: ^10.2.3
+ version: 10.2.3(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(rollup@4.59.0)(vue@3.5.30(typescript@5.9.3))
'@pinia/nuxt':
specifier: ^0.11.3
- version: 0.11.3(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)))
+ version: 0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))
'@vueuse/nuxt':
- specifier: ^14.2.0
- version: 14.2.0(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
+ specifier: ^14.2.1
+ version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
nuxt:
- specifier: ^4.3.0
- version: 4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
+ specifier: ^4.4.2
+ version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
pinia:
specifier: ^3.0.4
- version: 3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
+ version: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3))
scule:
specifier: ^1.3.0
version: 1.3.0
devDependencies:
'@commitlint/cli':
- specifier: ^20.4.0
- version: 20.4.0(@types/node@25.2.0)(typescript@5.9.3)
+ specifier: ^20.5.0
+ version: 20.5.0(@types/node@25.2.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3)
'@commitlint/config-conventional':
- specifier: ^20.4.0
- version: 20.4.0
+ specifier: ^20.5.0
+ version: 20.5.0
'@commitlint/types':
- specifier: ^20.4.0
- version: 20.4.0
+ specifier: ^20.5.0
+ version: 20.5.0
'@nuxt/eslint':
- specifier: ^1.13.0
- version: 1.13.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
+ specifier: ^1.15.2
+ version: 1.15.2(@typescript-eslint/utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.30)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
'@nuxt/test-utils':
- specifier: 3.23.0
- version: 3.23.0(magicast@0.5.1)(typescript@5.9.3)
+ specifier: 4.0.0
+ version: 4.0.0(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
better-sqlite3:
- specifier: ^12.6.2
- version: 12.6.2
+ specifier: ^12.8.0
+ version: 12.8.0
eslint:
- specifier: ^9.39.2
- version: 9.39.2(jiti@2.6.1)
+ specifier: ^10.1.0
+ version: 10.1.0(jiti@2.6.1)
eslint-plugin-unicorn:
- specifier: ^62.0.0
- version: 62.0.0(eslint@9.39.2(jiti@2.6.1))
+ specifier: ^63.0.0
+ version: 63.0.0(eslint@10.1.0(jiti@2.6.1))
husky:
specifier: ^9.1.7
version: 9.1.7
@@ -67,8 +67,27 @@ importers:
specifier: ^5.9.3
version: 5.9.3
vue-tsc:
- specifier: ^3.2.4
- version: 3.2.4(typescript@5.9.3)
+ specifier: ^3.2.6
+ version: 3.2.6(typescript@5.9.3)
+
+ docs:
+ dependencies:
+ '@nuxt/content':
+ specifier: ^3.12.0
+ version: 3.12.0(better-sqlite3@12.6.2)(magicast@0.5.2)
+ '@nuxt/ui':
+ specifier: ^4.5.1
+ version: 4.5.1(@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.2))(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(ioredis@5.10.0)(magicast@0.5.2)(tailwindcss@4.2.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))(yjs@13.6.28)(zod@3.25.76)
+ nuxt:
+ specifier: ^4.3.1
+ version: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+ devDependencies:
+ better-sqlite3:
+ specifier: ^12.5.0
+ version: 12.6.2
packages:
@@ -101,8 +120,8 @@ packages:
resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.29.0':
- resolution: {integrity: sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==}
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.27.3':
@@ -206,12 +225,12 @@ packages:
resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
- '@bomb.sh/tab@0.0.11':
- resolution: {integrity: sha512-RSqyreeicYBALcMaNxIUJTBknftXsyW45VRq5gKDNwKroh0Re5SDoWwXZaphb+OTEzVdpm/BA8Uq6y0P+AtVYw==}
+ '@bomb.sh/tab@0.0.14':
+ resolution: {integrity: sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==}
hasBin: true
peerDependencies:
cac: ^6.7.14
- citty: ^0.1.6
+ citty: ^0.1.6 || ^0.2.0
commander: ^13.1.0
peerDependenciesMeta:
cac:
@@ -221,112 +240,138 @@ packages:
commander:
optional: true
- '@capsizecss/unpack@3.0.1':
- resolution: {integrity: sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==}
+ '@capsizecss/unpack@4.0.0':
+ resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==}
engines: {node: '>=18'}
- '@clack/core@0.5.0':
- resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==}
+ '@clack/core@1.0.0':
+ resolution: {integrity: sha512-Orf9Ltr5NeiEuVJS8Rk2XTw3IxNC2Bic3ash7GgYeA8LJ/zmSNpSQ/m5UAhe03lA6KFgklzZ5KTHs4OAMA/SAQ==}
- '@clack/core@1.0.0-alpha.7':
- resolution: {integrity: sha512-3vdh6Ar09D14rVxJZIm3VQJkU+ZOKKT5I5cC0cOVazy70CNyYYjiwRj9unwalhESndgxx6bGc/m6Hhs4EKF5XQ==}
+ '@clack/core@1.1.0':
+ resolution: {integrity: sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==}
- '@clack/prompts@0.11.0':
- resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==}
+ '@clack/prompts@1.0.0':
+ resolution: {integrity: sha512-rWPXg9UaCFqErJVQ+MecOaWsozjaxol4yjnmYcGNipAWzdaWa2x+VJmKfGq7L0APwBohQOYdHC+9RO4qRXej+A==}
- '@clack/prompts@1.0.0-alpha.9':
- resolution: {integrity: sha512-sKs0UjiHFWvry4SiRfBi5Qnj0C/6AYx8aKkFPZQSuUZXgAram25ZDmhQmP7vj1aFyLpfHWtLQjWvOvcat0TOLg==}
+ '@clack/prompts@1.1.0':
+ resolution: {integrity: sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==}
'@cloudflare/kv-asset-handler@0.4.2':
resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
engines: {node: '>=18.0.0'}
- '@commitlint/cli@20.4.0':
- resolution: {integrity: sha512-2lqrFrYNxjKxgMqeYiO3zNM14XN9v72/5xIJyvdLw7sHEGlfg6sweW01PGNWiqZa6/AuZwsb0uzkgWJy6F4N2w==}
+ '@commitlint/cli@20.5.0':
+ resolution: {integrity: sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==}
engines: {node: '>=v18'}
hasBin: true
- '@commitlint/config-conventional@20.4.0':
- resolution: {integrity: sha512-nolhFe2YKIix0D4+tPXAWnnIc9WB5fOCgmm4h2EcRyEShC64oH/DpM9n++85NRdItvIhKb+Szsaeuug7KcEeIA==}
+ '@commitlint/config-conventional@20.5.0':
+ resolution: {integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==}
engines: {node: '>=v18'}
- '@commitlint/config-validator@20.4.0':
- resolution: {integrity: sha512-zShmKTF+sqyNOfAE0vKcqnpvVpG0YX8F9G/ZIQHI2CoKyK+PSdladXMSns400aZ5/QZs+0fN75B//3Q5CHw++w==}
+ '@commitlint/config-validator@20.5.0':
+ resolution: {integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==}
engines: {node: '>=v18'}
- '@commitlint/ensure@20.4.0':
- resolution: {integrity: sha512-F3qwnanJUisFWwh44GYYmMOxfgJL1FKV73FCB5zxo8pw1CHkxXadGfDfzNkN8B3iqgSGusDN2+oDH6upBmLszA==}
+ '@commitlint/ensure@20.5.0':
+ resolution: {integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==}
engines: {node: '>=v18'}
'@commitlint/execute-rule@20.0.0':
resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==}
engines: {node: '>=v18'}
- '@commitlint/format@20.4.0':
- resolution: {integrity: sha512-i3ki3WR0rgolFVX6r64poBHXM1t8qlFel1G1eCBvVgntE3fCJitmzSvH5JD/KVJN/snz6TfaX2CLdON7+s4WVQ==}
+ '@commitlint/format@20.5.0':
+ resolution: {integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==}
engines: {node: '>=v18'}
- '@commitlint/is-ignored@20.4.0':
- resolution: {integrity: sha512-E8AHpedEfuf+lZatFvFiJXA4TtZgBZ10+A7HzFudaEmTPPE5o6MGswxbxUIGAciaHAFj/oTTmyFc6A5tcvxE3Q==}
+ '@commitlint/is-ignored@20.5.0':
+ resolution: {integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==}
engines: {node: '>=v18'}
- '@commitlint/lint@20.4.0':
- resolution: {integrity: sha512-W90YCbm5h3Yg+btF5/X+cxsY6vd/H3tsFt6U7WBmDQSkKV8NmitYg89zeoSQyYEiQCwAsH0dcA+99aQtLZiSnw==}
+ '@commitlint/lint@20.5.0':
+ resolution: {integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==}
engines: {node: '>=v18'}
- '@commitlint/load@20.4.0':
- resolution: {integrity: sha512-Dauup/GfjwffBXRJUdlX/YRKfSVXsXZLnINXKz0VZkXdKDcaEILAi9oflHGbfydonJnJAbXEbF3nXPm9rm3G6A==}
+ '@commitlint/load@20.5.0':
+ resolution: {integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==}
engines: {node: '>=v18'}
- '@commitlint/message@20.4.0':
- resolution: {integrity: sha512-B5lGtvHgiLAIsK5nLINzVW0bN5hXv+EW35sKhYHE8F7V9Uz1fR4tx3wt7mobA5UNhZKUNgB/+ldVMQE6IHZRyA==}
+ '@commitlint/message@20.4.3':
+ resolution: {integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==}
engines: {node: '>=v18'}
- '@commitlint/parse@20.4.0':
- resolution: {integrity: sha512-NcRkqo/QUnuc1RgxRCIKTqobKzF0BKJ8h3i1jRyeZ+SEy5rO9dPNOh4BqrFsSznb5mnwETYB7ph9tUcthNkwAQ==}
+ '@commitlint/parse@20.5.0':
+ resolution: {integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==}
engines: {node: '>=v18'}
- '@commitlint/read@20.4.0':
- resolution: {integrity: sha512-QfpFn6/I240ySEGv7YWqho4vxqtPpx40FS7kZZDjUJ+eHxu3azfhy7fFb5XzfTqVNp1hNoI3tEmiEPbDB44+cg==}
+ '@commitlint/read@20.5.0':
+ resolution: {integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==}
engines: {node: '>=v18'}
- '@commitlint/resolve-extends@20.4.0':
- resolution: {integrity: sha512-ay1KM8q0t+/OnlpqXJ+7gEFQNlUtSU5Gxr8GEwnVf2TPN3+ywc5DzL3JCxmpucqxfHBTFwfRMXxPRRnR5Ki20g==}
+ '@commitlint/resolve-extends@20.5.0':
+ resolution: {integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==}
engines: {node: '>=v18'}
- '@commitlint/rules@20.4.0':
- resolution: {integrity: sha512-E+UoAA7WA4xrre9lDyX2vL4Df26I+vqMN4D8JoW/L2xE/VRDvn533/ibhgSlGYDltB9nm2S+1lti3PagEwO0ag==}
+ '@commitlint/rules@20.5.0':
+ resolution: {integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==}
engines: {node: '>=v18'}
'@commitlint/to-lines@20.0.0':
resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==}
engines: {node: '>=v18'}
- '@commitlint/top-level@20.4.0':
- resolution: {integrity: sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==}
+ '@commitlint/top-level@20.4.3':
+ resolution: {integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==}
engines: {node: '>=v18'}
- '@commitlint/types@20.4.0':
- resolution: {integrity: sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==}
+ '@commitlint/types@20.5.0':
+ resolution: {integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==}
engines: {node: '>=v18'}
+ '@conventional-changelog/git-client@2.6.0':
+ resolution: {integrity: sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ conventional-commits-filter: ^5.0.0
+ conventional-commits-parser: ^6.3.0
+ peerDependenciesMeta:
+ conventional-commits-filter:
+ optional: true
+ conventional-commits-parser:
+ optional: true
+
'@dxup/nuxt@0.3.2':
resolution: {integrity: sha512-2f2usP4oLNsIGjPprvABe3f3GWuIhIDp0169pGLFxTDRI5A4d4sBbGpR+tD9bGZCT+1Btb6Q2GKlyv3LkDCW5g==}
+ '@dxup/nuxt@0.4.0':
+ resolution: {integrity: sha512-28LDotpr9G2knUse3cQYsOo6NJq5yhABv4ByRVRYJUmzf9Q31DI7rpRek4POlKy1aAcYyKgu5J2616pyqLohYg==}
+ peerDependencies:
+ typescript: '*'
+
'@dxup/unimport@0.1.2':
resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==}
'@emnapi/core@1.8.1':
resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==}
+ '@emnapi/core@1.9.0':
+ resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==}
+
'@emnapi/runtime@1.8.1':
resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==}
+ '@emnapi/runtime@1.9.0':
+ resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==}
+
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
- '@es-joy/jsdoccomment@0.83.0':
- resolution: {integrity: sha512-e1MHSEPJ4m35zkBvNT6kcdeH1SvMaJDsPC3Xhfseg3hvF50FUE3f46Yn36jgbrPYYXezlWUQnevv23c+lx2MCA==}
+ '@emnapi/wasi-threads@1.2.0':
+ resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==}
+
+ '@es-joy/jsdoccomment@0.84.0':
+ resolution: {integrity: sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@es-joy/resolve.exports@1.2.0':
@@ -339,8 +384,14 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.27.2':
- resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
+ '@esbuild/aix-ppc64@0.27.3':
+ resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.27.4':
+ resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -351,8 +402,14 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.27.2':
- resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
+ '@esbuild/android-arm64@0.27.3':
+ resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.27.4':
+ resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -363,8 +420,14 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.27.2':
- resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
+ '@esbuild/android-arm@0.27.3':
+ resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.4':
+ resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -375,8 +438,14 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.27.2':
- resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
+ '@esbuild/android-x64@0.27.3':
+ resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.4':
+ resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -387,8 +456,14 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.27.2':
- resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ '@esbuild/darwin-arm64@0.27.3':
+ resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.27.4':
+ resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -399,8 +474,14 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.27.2':
- resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ '@esbuild/darwin-x64@0.27.3':
+ resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.4':
+ resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -411,8 +492,14 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.27.2':
- resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ '@esbuild/freebsd-arm64@0.27.3':
+ resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.27.4':
+ resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -423,8 +510,14 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.27.2':
- resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ '@esbuild/freebsd-x64@0.27.3':
+ resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.4':
+ resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -435,8 +528,14 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.27.2':
- resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ '@esbuild/linux-arm64@0.27.3':
+ resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.27.4':
+ resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -447,8 +546,14 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.27.2':
- resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ '@esbuild/linux-arm@0.27.3':
+ resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.4':
+ resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -459,8 +564,14 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.27.2':
- resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ '@esbuild/linux-ia32@0.27.3':
+ resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.4':
+ resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -471,8 +582,14 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.27.2':
- resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ '@esbuild/linux-loong64@0.27.3':
+ resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.4':
+ resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -483,8 +600,14 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.27.2':
- resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ '@esbuild/linux-mips64el@0.27.3':
+ resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.4':
+ resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -495,8 +618,14 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.27.2':
- resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ '@esbuild/linux-ppc64@0.27.3':
+ resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.4':
+ resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -507,8 +636,14 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.27.2':
- resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ '@esbuild/linux-riscv64@0.27.3':
+ resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.4':
+ resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -519,8 +654,14 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.27.2':
- resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ '@esbuild/linux-s390x@0.27.3':
+ resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.4':
+ resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -531,8 +672,14 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.27.2':
- resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ '@esbuild/linux-x64@0.27.3':
+ resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.4':
+ resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
@@ -543,8 +690,14 @@ packages:
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-arm64@0.27.2':
- resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ '@esbuild/netbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
@@ -555,8 +708,14 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.27.2':
- resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
+ '@esbuild/netbsd-x64@0.27.3':
+ resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.4':
+ resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
@@ -567,8 +726,14 @@ packages:
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-arm64@0.27.2':
- resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
+ '@esbuild/openbsd-arm64@0.27.3':
+ resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-arm64@0.27.4':
+ resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -579,8 +744,14 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.27.2':
- resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
+ '@esbuild/openbsd-x64@0.27.3':
+ resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.4':
+ resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
@@ -591,8 +762,14 @@ packages:
cpu: [arm64]
os: [openharmony]
- '@esbuild/openharmony-arm64@0.27.2':
- resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
+ '@esbuild/openharmony-arm64@0.27.3':
+ resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/openharmony-arm64@0.27.4':
+ resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
@@ -603,8 +780,14 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.27.2':
- resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
+ '@esbuild/sunos-x64@0.27.3':
+ resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.27.4':
+ resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -615,8 +798,14 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.27.2':
- resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
+ '@esbuild/win32-arm64@0.27.3':
+ resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.27.4':
+ resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -627,8 +816,14 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.27.2':
- resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
+ '@esbuild/win32-ia32@0.27.3':
+ resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.4':
+ resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -639,8 +834,14 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.27.2':
- resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
+ '@esbuild/win32-x64@0.27.3':
+ resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.4':
+ resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -655,68 +856,56 @@ packages:
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/compat@1.4.1':
- resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/compat@2.0.3':
+ resolution: {integrity: sha512-SjIJhGigp8hmd1YGIBwh7Ovri7Kisl42GYFjrOyHhtfYGGoLW6teYi/5p8W50KSsawUPpuLOSmsq1bD0NGQLBw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
- eslint: ^8.40 || 9
+ eslint: ^8.40 || 9 || 10
peerDependenciesMeta:
eslint:
optional: true
- '@eslint/config-array@0.21.1':
- resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/config-helpers@0.4.2':
- resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/config-array@0.23.3':
+ resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/config-helpers@0.5.2':
- resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==}
+ '@eslint/config-helpers@0.5.3':
+ resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/config-inspector@1.4.2':
- resolution: {integrity: sha512-Ay8QcvV/Tq6YDeoltwZDQsQTrcS5flPkOp4ylk1WdV7L2UGotINwjatjbAIEqBTmP3G0g3Ah8dnuHC8DsnKPYQ==}
+ '@eslint/config-inspector@1.5.0':
+ resolution: {integrity: sha512-YK/VdQ+pibx5pcCI2GPZVO6vFemf/pkB662HuFtc5AA4WLQ9upb3fAoZSjOAYoDJx58qGTDp6xq9ldd/vluNxQ==}
hasBin: true
peerDependencies:
- eslint: ^8.50.0 || ^9.0.0
-
- '@eslint/core@0.17.0':
- resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ eslint: ^8.50.0 || ^9.0.0 || ^10.0.0
- '@eslint/core@1.1.0':
- resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==}
+ '@eslint/core@1.1.1':
+ resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/eslintrc@3.3.3':
- resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
+ '@eslint/js@9.39.4':
+ resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.39.2':
- resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/object-schema@2.1.7':
- resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/object-schema@3.0.3':
+ resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@eslint/plugin-kit@0.4.1':
- resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/plugin-kit@0.6.1':
+ resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- '@floating-ui/core@1.7.4':
- resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==}
+ '@floating-ui/core@1.7.5':
+ resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
- '@floating-ui/dom@1.7.5':
- resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==}
+ '@floating-ui/dom@1.7.6':
+ resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
- '@floating-ui/utils@0.2.10':
- resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+ '@floating-ui/utils@0.2.11':
+ resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
- '@floating-ui/vue@1.1.10':
- resolution: {integrity: sha512-vdf8f6rHnFPPLRsmL4p12wYl+Ux4mOJOkjzKEMYVnwdf7UFdvBtHlLvQyx8iKG5vhPRbDRgZxdtpmyigDPjzYg==}
+ '@floating-ui/vue@1.1.11':
+ resolution: {integrity: sha512-HzHKCNVxnGS35r9fCHBc3+uCnjw9IWIlCPL683cGgM9Kgj2BiAl8x1mS7vtvP6F9S/e/q4O6MApwSHj8hNLGfw==}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
@@ -734,11 +923,11 @@ packages:
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
- '@iconify-json/lucide@1.2.87':
- resolution: {integrity: sha512-wxYIAp0f8Uw0rJa6BMWMaRbiHk3yV4XczA38GKXFlqyZtTdmHM1QOF4NZw5xpMlRDzbh2MnB7wjteLeFnn/ciQ==}
+ '@iconify-json/lucide@1.2.98':
+ resolution: {integrity: sha512-Lx2464W8Tty/QEnZ2UPb73nPdML/HpGCj0J0w37jP3/jx3l4fniZBjDxe1TgHiIL5XW9QO3vlx53ZQZ5JsNpzQ==}
- '@iconify/collections@1.0.645':
- resolution: {integrity: sha512-N2OBLagQ/xrNFSdRRjzmSjNB610hark+/lMXQ4RZM6773WCOSsQlY8ZuWq2RRvSwLQBcciBuLdx2qhkD5JcS1A==}
+ '@iconify/collections@1.0.659':
+ resolution: {integrity: sha512-gD9i7zfQpr3ZAv1BywaEri8o008KQT9iYaMw5EY4Y/y0qeEZB12FJMMyJGS3NvSeG80udu4kx8aZZLRsAdcANw==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -751,14 +940,14 @@ packages:
peerDependencies:
vue: '>=3'
- '@internationalized/date@3.10.1':
- resolution: {integrity: sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==}
+ '@internationalized/date@3.12.0':
+ resolution: {integrity: sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==}
'@internationalized/number@3.6.5':
resolution: {integrity: sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==}
- '@intlify/bundle-utils@11.0.3':
- resolution: {integrity: sha512-dURCDz1rQXwAb1+Hv4NDit6aZSRaAt4zUYBPEeaDCe3FSs8dMtdF6kEvgd9JwsYFSTAHcvbTs2CqwBjjt9Ltsw==}
+ '@intlify/bundle-utils@11.0.7':
+ resolution: {integrity: sha512-fEO3CJGPymxieGh8BHox7d6stgajDQae7wgpH6YYw7WX+cdW6jTTXyljZqz7OV3JcwlS9M9UHSoO+YwiO56IhA==}
engines: {node: '>= 20'}
peerDependencies:
petite-vue-i18n: '*'
@@ -769,28 +958,32 @@ packages:
vue-i18n:
optional: true
- '@intlify/core-base@11.2.8':
- resolution: {integrity: sha512-nBq6Y1tVkjIUsLsdOjDSJj4AsjvD0UG3zsg9Fyc+OivwlA/oMHSKooUy9tpKj0HqZ+NWFifweHavdljlBLTwdA==}
+ '@intlify/core-base@11.3.0':
+ resolution: {integrity: sha512-NNX5jIwF4TJBe7RtSKDMOA6JD9mp2mRcBHAwt2X+Q8PvnZub0yj5YYXlFu2AcESdgQpEv/5Yx2uOCV/yh7YkZg==}
+ engines: {node: '>= 16'}
+
+ '@intlify/core@11.3.0':
+ resolution: {integrity: sha512-vFnw1TgM1J3T/hUm13NLBgciKzqePICs+C0VEcSTuew/7ZJs3NGxyLCEjF4W2Rv09MwZQj9H1Dr4m+e+kNDLcw==}
engines: {node: '>= 16'}
- '@intlify/core@11.2.8':
- resolution: {integrity: sha512-su9kRlQAkG+SBP5cufTYmwPnqjur8etZVa2lnR80CgE5JqA0pXwGUF7W08dR/a6T2oDoYPh53/S8O0CGbfx1qg==}
+ '@intlify/devtools-types@11.3.0':
+ resolution: {integrity: sha512-G9CNL4WpANWVdUjubOIIS7/D2j/0j+1KJmhBJxHilWNKr9mmt3IjFV3Hq4JoBP23uOoC5ynxz/FHZ42M+YxfGw==}
engines: {node: '>= 16'}
'@intlify/h3@0.7.4':
resolution: {integrity: sha512-BtL5+U3Dd9Qz6so+ArOMQWZ+nV21rOqqYUXnqwvW6J3VUXr66A9+9+vUFb/NAQvOU4kdfkO3c/9LMRGU9WZ8vw==}
engines: {node: '>= 20'}
- '@intlify/message-compiler@11.2.8':
- resolution: {integrity: sha512-A5n33doOjmHsBtCN421386cG1tWp5rpOjOYPNsnpjIJbQ4POF0QY2ezhZR9kr0boKwaHjbOifvyQvHj2UTrDFQ==}
+ '@intlify/message-compiler@11.3.0':
+ resolution: {integrity: sha512-RAJp3TMsqohg/Wa7bVF3cChRhecSYBLrTCQSj7j0UtWVFLP+6iEJoE2zb7GU5fp+fmG5kCbUdzhmlAUCWXiUJw==}
engines: {node: '>= 16'}
- '@intlify/shared@11.2.8':
- resolution: {integrity: sha512-l6e4NZyUgv8VyXXH4DbuucFOBmxLF56C/mqh2tvApbzl2Hrhi1aTDcuv5TKdxzfHYmpO3UB0Cz04fgDT9vszfw==}
+ '@intlify/shared@11.3.0':
+ resolution: {integrity: sha512-LC6P/uay7rXL5zZ5+5iRJfLs/iUN8apu9tm8YqQVmW3Uq3X4A0dOFUIDuAmB7gAC29wTHOS3EiN/IosNSz0eNQ==}
engines: {node: '>= 16'}
- '@intlify/unplugin-vue-i18n@11.0.3':
- resolution: {integrity: sha512-iQuik0nXfdVZ5ab+IEyBFEuvMQ213zfbUpBXaEdHPk8DV+qB2CT/SdFuDhfUDRRBZc/e0qoLlfmc9urhnRYVWw==}
+ '@intlify/unplugin-vue-i18n@11.0.7':
+ resolution: {integrity: sha512-wswKprS1D8VfnxxVhKxug5wa3MbDSOcCoXOBjnzhMK+6NfP6h6UI8pFqSBIvcW8nPDuzweTc0Sk3PeBCcubfoQ==}
engines: {node: '>= 20'}
peerDependencies:
petite-vue-i18n: '*'
@@ -824,16 +1017,8 @@ packages:
vue-i18n:
optional: true
- '@ioredis/commands@1.5.0':
- resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==}
-
- '@isaacs/balanced-match@4.0.1':
- resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
- engines: {node: 20 || >=22}
-
- '@isaacs/brace-expansion@5.0.0':
- resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
- engines: {node: 20 || >=22}
+ '@ioredis/commands@1.5.1':
+ resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==}
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
@@ -899,13 +1084,18 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@nuxt/cli@3.32.0':
- resolution: {integrity: sha512-n2f3SRjPlhthPvo2qWjLRRiTrUtB6WFwg0BGsvtqcqZVeQpNEU371zuKWBaFrWgqDZHV1r/aD9jrVCo+C8Pmrw==}
- engines: {node: ^16.10.0 || >=18.0.0}
+ '@nuxt/cli@3.34.0':
+ resolution: {integrity: sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
hasBin: true
+ peerDependencies:
+ '@nuxt/schema': ^4.3.1
+ peerDependenciesMeta:
+ '@nuxt/schema':
+ optional: true
- '@nuxt/content@3.11.0':
- resolution: {integrity: sha512-sC2AyuQAZpw+iSxwekh75AsLc7Ja9aEY+l4r1DxGBEMkq+YGj8+6AqQSRqFjOH0Hu9yDUhRgpIUnlGVq43WqOA==}
+ '@nuxt/content@3.12.0':
+ resolution: {integrity: sha512-Uh1HuAOAFZVdnBSLarqJAsvx6OduD8bOGh35llnE0iM/JHZUJc4N4POB5yVADAx7lXzlFyoNlTdmCAglJrbE9Q==}
engines: {node: '>= 20.19.0'}
peerDependencies:
'@electric-sql/pglite': '*'
@@ -931,17 +1121,22 @@ packages:
'@nuxt/devalue@2.0.2':
resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
- '@nuxt/devtools-kit@3.1.1':
- resolution: {integrity: sha512-sjiKFeDCOy1SyqezSgyV4rYNfQewC64k/GhOsuJgRF+wR2qr6KTVhO6u2B+csKs74KrMrnJprQBgud7ejvOXAQ==}
+ '@nuxt/devtools-kit@2.7.0':
+ resolution: {integrity: sha512-MIJdah6CF6YOW2GhfKnb8Sivu6HpcQheqdjOlZqShBr+1DyjtKQbAKSCAyKPaoIzZP4QOo2SmTFV6aN8jBeEIQ==}
+ peerDependencies:
+ vite: '>=6.0'
+
+ '@nuxt/devtools-kit@3.2.3':
+ resolution: {integrity: sha512-5zj7Xx5CDI6P84kMalXoxGLd470buF6ncsRhiEPq8UlwdpVeR7bwi8QnparZNFBdG79bZ5KUkfi5YDXpLYPoIA==}
peerDependencies:
vite: '>=6.0'
- '@nuxt/devtools-wizard@3.1.1':
- resolution: {integrity: sha512-6UORjapNKko2buv+3o57DQp69n5Z91TeJ75qdtNKcTvOfCTJrO78Ew0nZSgMMGrjbIJ4pFsHQEqXfgYLw3pNxg==}
+ '@nuxt/devtools-wizard@3.2.3':
+ resolution: {integrity: sha512-VXSxWlv476Mhg2RkWMkjslOXcbf0trsp/FDHZTjg9nPDGROGV88xNuvgIF4eClP7zesjETOUow0te6s8504w9A==}
hasBin: true
- '@nuxt/devtools@3.1.1':
- resolution: {integrity: sha512-UG8oKQqcSyzwBe1l0z24zypmwn6FLW/HQMHK/F/gscUU5LeMHzgBhLPD+cuLlDvwlGAbifexWNMsS/I7n95KlA==}
+ '@nuxt/devtools@3.2.3':
+ resolution: {integrity: sha512-UfbCHJDQ2DK0D787G6/QhuS2aYCDFTKMgtvE6OBBM1qYpR6pYEu5LRClQr9TFN4TIqJvgluQormGcYr1lsTKTw==}
hasBin: true
peerDependencies:
'@vitejs/devtools': '*'
@@ -950,24 +1145,24 @@ packages:
'@vitejs/devtools':
optional: true
- '@nuxt/eslint-config@1.13.0':
- resolution: {integrity: sha512-b/gGtdOcRSak8xfN93InDwPopBr3SXmJ4N2XJI8zw/BZRGX1as6R9JYMpwX6QZCoIm7t1ltvXSAKsfoAtzgxWA==}
+ '@nuxt/eslint-config@1.15.2':
+ resolution: {integrity: sha512-vS6mWB87tYjB8h3TxG/QziaZ6CGJpEOBd7N/j+64/tjNipUJzNgKwDzyGoOifNqyDDnlvgi6T3m9XpeYm4qRaA==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
eslint-plugin-format: '*'
peerDependenciesMeta:
eslint-plugin-format:
optional: true
- '@nuxt/eslint-plugin@1.13.0':
- resolution: {integrity: sha512-QMMFxDNaTY0ur2wAVsGC8vGHVlSONV9qPclze0xG6tUX/4G/xrDbNkSYeRIbYf6/Nk4rYFiXxS0CDUJFwUKidg==}
+ '@nuxt/eslint-plugin@1.15.2':
+ resolution: {integrity: sha512-LZ4gEcPP5GjzAkb6Kk04a4v0vvkTLOpmnEvdDatnkSlxtQLUSwX8v11vcDGXL92ZQ98dFoC1Q1IA6Tz3jdFIig==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
- '@nuxt/eslint@1.13.0':
- resolution: {integrity: sha512-bWXTbak6XCsp86RnHKPMQ9KLBZtr91Gq6q+PquB6rpRtqcPI8+yfp90ohDCavLCAF5xVzvyfusy1Itws4yZ5IA==}
+ '@nuxt/eslint@1.15.2':
+ resolution: {integrity: sha512-LwDavQoLl+y0sIDqWEYbOnM6FOmXVIYSEjuvkO1hgAqhb0CvG3hgTnfE1qkf1jOAZp3CZGP+6rxRAJ0dxhueIQ==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
eslint-webpack-plugin: ^4.1.0
vite-plugin-eslint2: ^5.0.0
peerDependenciesMeta:
@@ -976,49 +1171,76 @@ packages:
vite-plugin-eslint2:
optional: true
- '@nuxt/fonts@0.12.1':
- resolution: {integrity: sha512-ALajI/HE+uqqL/PWkWwaSUm1IdpyGPbP3mYGy2U1l26/o4lUZBxjFaduMxaZ85jS5yQeJfCu2eEHANYFjAoujQ==}
+ '@nuxt/fonts@0.14.0':
+ resolution: {integrity: sha512-4uXQl9fa5F4ibdgU8zomoOcyMdnwgdem+Pi8JEqeDYI5yPR32Kam6HnuRr47dTb97CstaepAvXPWQUUHMtjsFQ==}
'@nuxt/icon@2.2.1':
resolution: {integrity: sha512-GI840yYGuvHI0BGDQ63d6rAxGzG96jQcWrnaWIQKlyQo/7sx9PjXkSHckXUXyX1MCr9zY6U25Td6OatfY6Hklw==}
- '@nuxt/kit@3.21.0':
- resolution: {integrity: sha512-KMTLK/dsGaQioZzkYUvgfN9le4grNW54aNcA1jqzgVZLcFVy4jJfrJr5WZio9NT2EMfajdoZ+V28aD7BRr4Zfw==}
+ '@nuxt/kit@3.21.1':
+ resolution: {integrity: sha512-QORZRjcuTKgo++XP1Pc2c2gqwRydkaExrIRfRI9vFsPA3AzuHVn5Gfmbv1ic8y34e78mr5DMBvJlelUaeOuajg==}
+ engines: {node: '>=18.12.0'}
+
+ '@nuxt/kit@3.21.2':
+ resolution: {integrity: sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==}
engines: {node: '>=18.12.0'}
- '@nuxt/kit@4.3.0':
- resolution: {integrity: sha512-cD/0UU9RQmlnTbmyJTDyzN8f6CzpziDLv3tFQCnwl0Aoxt3KmFu4k/XA4Sogxqj7jJ/3cdX1kL+Lnsh34sxcQQ==}
+ '@nuxt/kit@4.3.1':
+ resolution: {integrity: sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA==}
engines: {node: '>=18.12.0'}
- '@nuxt/nitro-server@4.3.0':
- resolution: {integrity: sha512-NkI8q8211BTLfQr6m24PjBp9GGyKWJMxRGSqe5WGgpQD5BpSnlvM8l1HaaP4xn9/P4v1Hp/LxX+vYElY2fw/zw==}
+ '@nuxt/kit@4.4.2':
+ resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==}
+ engines: {node: '>=18.12.0'}
+
+ '@nuxt/nitro-server@4.3.1':
+ resolution: {integrity: sha512-4aNiM69Re02gI1ywnDND0m6QdVKXhWzDdtvl/16veytdHZj3FSq57ZCwOClNJ7HQkEMqXgS+bi6S2HmJX+et+g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ nuxt: ^4.3.1
+
+ '@nuxt/nitro-server@4.4.2':
+ resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- nuxt: ^4.3.0
+ '@babel/plugin-proposal-decorators': ^7.25.0
+ '@rollup/plugin-babel': ^6.0.0 || ^7.0.0
+ nuxt: ^4.4.2
+ peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@rollup/plugin-babel':
+ optional: true
- '@nuxt/schema@4.3.0':
- resolution: {integrity: sha512-+Ps3exseMFH3MOapbBmDdpaHpPV7wqcB6+Ir9w8h91771HwMOWrQomAZpqDvw7FtFraoD5Xw7dhSKDhkwJRSmQ==}
+ '@nuxt/schema@4.3.1':
+ resolution: {integrity: sha512-S+wHJdYDuyk9I43Ej27y5BeWMZgi7R/UVql3b3qtT35d0fbpXW7fUenzhLRCCDC6O10sjguc6fcMcR9sMKvV8g==}
engines: {node: ^14.18.0 || >=16.10.0}
- '@nuxt/telemetry@2.6.6':
- resolution: {integrity: sha512-Zh4HJLjzvm3Cq9w6sfzIFyH9ozK5ePYVfCUzzUQNiZojFsI2k1QkSBrVI9BGc6ArKXj/O6rkI6w7qQ+ouL8Cag==}
+ '@nuxt/schema@4.4.2':
+ resolution: {integrity: sha512-/q6C7Qhiricgi+PKR7ovBnJlKTL0memCbA1CzRT+itCW/oeYzUfeMdQ35mGntlBoyRPNrMXbzuSUhfDbSCU57w==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
+ '@nuxt/telemetry@2.7.0':
+ resolution: {integrity: sha512-mrKC3NjAlBOooLLVTYcIUie1meipoYq5vkoESoVTEWTB34T3a0QJzOfOPch+HYlUR+5Lqy1zLMv6epHFgYAKLA==}
engines: {node: '>=18.12.0'}
hasBin: true
+ peerDependencies:
+ '@nuxt/kit': '>=3.0.0'
- '@nuxt/test-utils@3.23.0':
- resolution: {integrity: sha512-NZKWSwvfIiTO2qhMoJHVbUQLgJMe96J9ccLhPPqN5+a/XzISZ027LG9wWVp1tC5oB0qQ3eUDhrxmq6Lj8EQLMQ==}
- engines: {node: ^20.11.1 || ^22.0.0 || >=24.0.0}
+ '@nuxt/test-utils@4.0.0':
+ resolution: {integrity: sha512-QJfyCiqYxflUKA5xlEGuXdDApTBhJxoPXxYePIDtA90hkmKbhYs/mrMM+Bi9LiUrI/cCJOPRyIx9jOzhMvTIgg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
peerDependencies:
- '@cucumber/cucumber': ^10.3.1 || >=11.0.0
- '@jest/globals': ^29.5.0 || >=30.0.0
+ '@cucumber/cucumber': '>=11.0.0'
+ '@jest/globals': '>=30.0.0'
'@playwright/test': ^1.43.1
- '@testing-library/vue': ^7.0.0 || ^8.0.1
+ '@testing-library/vue': ^8.0.1
'@vitest/ui': '*'
'@vue/test-utils': ^2.4.2
- happy-dom: '*'
- jsdom: '*'
+ happy-dom: '>=20.0.11'
+ jsdom: '>=27.4.0'
playwright-core: ^1.43.1
- vitest: ^3.2.0
+ vitest: ^4.0.2
peerDependenciesMeta:
'@cucumber/cucumber':
optional: true
@@ -1041,8 +1263,8 @@ packages:
vitest:
optional: true
- '@nuxt/ui@4.4.0':
- resolution: {integrity: sha512-c9n8PgYSpFpC3GSz0LtAzceo/jjNyaI1yFJbDPJop5OoeeWqKOC3filsQFNPxo+i3v81EiGkZq+bJ7pnHxAGkA==}
+ '@nuxt/ui@4.5.1':
+ resolution: {integrity: sha512-5hWgreVPX6EsNCZNoOd2o7m9fTA3fwUMDw+zeYTSAjhSKtAuvkZrBtmez4MUeTv+LO1gknesgvErdIvlUnElTg==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -1051,7 +1273,7 @@ packages:
joi: ^18.0.0
superstruct: ^2.0.0
tailwindcss: ^4.0.0
- typescript: ^5.6.3
+ typescript: ^5.9.3
valibot: ^1.0.0
vue-router: ^4.5.0
yup: ^1.7.0
@@ -1074,162 +1296,321 @@ packages:
zod:
optional: true
- '@nuxt/vite-builder@4.3.0':
- resolution: {integrity: sha512-qOVevlukWUztfJ9p/OtujRxwaXIsnoTo2ZW4pPY1zQcuR1DtBtBsiePLzftoDz1VGx9JF5GAx9YyrgTn/EmcWQ==}
+ '@nuxt/vite-builder@4.3.1':
+ resolution: {integrity: sha512-LndnxPJzDUDbWAB8q5gZZN1mSOLHEyMOoj4T3pTdPydGf31QZdMR0V1fQ1fdRgtgNtWB3WLP0d1ZfaAOITsUpw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ nuxt: 4.3.1
+ rolldown: ^1.0.0-beta.38
+ vue: ^3.3.4
+ peerDependenciesMeta:
+ rolldown:
+ optional: true
+
+ '@nuxt/vite-builder@4.4.2':
+ resolution: {integrity: sha512-fJaIwMA8ID6BU5EqmoDvnhq4qYDJeWjdHk4jfqy8D3Nm7CoUW0BvX7Ee92XoO05rtUiClGlk/NQ1Ii8hs3ZIbw==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
- nuxt: 4.3.0
+ '@babel/plugin-proposal-decorators': ^7.25.0
+ '@babel/plugin-syntax-jsx': ^7.25.0
+ nuxt: 4.4.2
rolldown: ^1.0.0-beta.38
+ rollup-plugin-visualizer: ^6.0.0 || ^7.0.1
vue: ^3.3.4
peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@babel/plugin-syntax-jsx':
+ optional: true
rolldown:
optional: true
+ rollup-plugin-visualizer:
+ optional: true
'@nuxtjs/color-mode@3.5.2':
resolution: {integrity: sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA==}
- '@nuxtjs/i18n@10.2.1':
- resolution: {integrity: sha512-/CHAIpYbFgobxeMsnKcD8xBUHxBpqipRMjaI3ol9MVZKscJM+IetYdNL9lGNFdEtlxzkV8COxnoa60rE4sPjuQ==}
+ '@nuxtjs/i18n@10.2.3':
+ resolution: {integrity: sha512-nRAQJbWjbiBvW6XRsG3Q6olYw2EKz7V1J6cDCHLCPbF1EyNhrAH/9aCNQaR5PYcoXPeRLpF86DIPBEnamghyHw==}
engines: {node: '>=20.11.1'}
- '@nuxtjs/mdc@0.20.0':
- resolution: {integrity: sha512-CV1FuCZppBpNjtWT+OaV+t7qbm/dD+2bbf7Or0h1gxperlf1bB3VZnDoBkOTRjgPWyYvzzRS7FUOQJLQG28MEA==}
+ '@nuxtjs/mdc@0.20.2':
+ resolution: {integrity: sha512-afAJKnXKdvDtoNOGARQMpZoGprL1T3OGnj+K9edJjX+WdhCwvVabBijhi8BAlpx+YzA/DpcZx8bDFZk/aoSJmA==}
+
+ '@oxc-minify/binding-android-arm-eabi@0.112.0':
+ resolution: {integrity: sha512-m7TGBR2hjsBJIN9UJ909KBoKsuogo6CuLsHKvUIBXdjI0JVHP8g4ZHeB+BJpGn5LJdeSGDfz9MWiuXrZDRzunw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
- '@oxc-minify/binding-android-arm-eabi@0.110.0':
- resolution: {integrity: sha512-43fMTO8/5bMlqfOiNSZNKUzIqeLIYuB9Hr1Ohyf58B1wU11S2dPGibTXOGNaWsfgHy99eeZ1bSgeIHy/fEYqbw==}
+ '@oxc-minify/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxc-minify/binding-android-arm64@0.110.0':
- resolution: {integrity: sha512-5oQrnn9eK/ccOp80PTrNj0Vq893NPNNRryjGpOIVsYNgWFuoGCfpnKg68oEFcN8bArizYAqw4nvgHljEnar69w==}
+ '@oxc-minify/binding-android-arm64@0.112.0':
+ resolution: {integrity: sha512-RvxOOkzvP5NeeoraBtgNJSBqO+XzlS7DooxST/drAXCfO52GsmxVB1N7QmifrsTYtH8GC2z3DTFjZQ1w/AJOWg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-minify/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxc-minify/binding-darwin-arm64@0.110.0':
- resolution: {integrity: sha512-dqBDgTG9tF2z2lrZp9E8wU+Godz1i8gCGSei2eFKS2hRploBOD5dmOLp1j4IMornkPvSQmbwB3uSjPq7fjx4EA==}
+ '@oxc-minify/binding-darwin-arm64@0.112.0':
+ resolution: {integrity: sha512-hDslO3uVHza3kB9zkcsi25JzN65Gj5ZYty0OvylS11Mhg9ydCYxAzfQ/tISHW/YmV1NRUJX8+GGqM1cKmrHaTA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-minify/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxc-minify/binding-darwin-x64@0.110.0':
- resolution: {integrity: sha512-U0AqabqaooDOpYmeeOye8wClv8PSScELXgOfYqyqgrwH9J9KrpCE1jL8Rlqgz68QbL4mPw3V6sKiiHssI4CLeQ==}
+ '@oxc-minify/binding-darwin-x64@0.112.0':
+ resolution: {integrity: sha512-mWA2Y5bUyNoGM+gSGGHesgtQ3LDWgpRe4zDGkBDovxNIiDLBXqu/7QcuS+G918w8oG9VYm1q1iinILer/2pD1Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-minify/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxc-minify/binding-freebsd-x64@0.110.0':
- resolution: {integrity: sha512-H0w8o/Wo1072WSdLfhwwrpFpwZnPpjQODlHuRYkTfsSSSJbTxQtjJd4uxk7YJsRv5RQp69y0I7zvdH6f8Xueyw==}
+ '@oxc-minify/binding-freebsd-x64@0.112.0':
+ resolution: {integrity: sha512-T7fsegxcy82xS0jWPXkz/BMhrkb3D7YOCiV0R9pDksjaov+iIFoNEWAoBsaC5NtpdzkX+bmffwDpu336EIfEeg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-minify/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxc-minify/binding-linux-arm-gnueabihf@0.110.0':
- resolution: {integrity: sha512-qd6sW0AvEVYZhbVVMGtmKZw3b1zDYGIW+54Uh42moWRAj6i4Jhk/LGr6r9YNZpOINeuvZfkFuEeDD/jbu7xPUA==}
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.112.0':
+ resolution: {integrity: sha512-yePavbIilAcpVYc8vRsDCn3xJxHMXDZIiamyH9fuLosAHNELcLib4/JR4fhDk4NmHVagQH3kRhsnm5Q9cm3pAw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm-musleabihf@0.112.0':
+ resolution: {integrity: sha512-lmPWLXtW6FspERhy97iP0hwbmLtL66xI29QQ9GpHmTiE4k+zv/FaefuV/Qw+LuHnmFSYzUNrLcxh4ulOZTIP2g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-minify/binding-linux-arm-musleabihf@0.110.0':
- resolution: {integrity: sha512-7WXP0aXMrWSn0ScppUBi3jf68ebfBG0eri8kxLmBOVSBj6jw1repzkHMITJMBeLr5d0tT/51qFEptiAk2EP2iA==}
+ '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-minify/binding-linux-arm64-gnu@0.110.0':
- resolution: {integrity: sha512-LYfADrq5x1W5gs+u9OIbMbDQNYkAECTXX0ufnAuf3oGmO51rF98kGFR5qJqC/6/csokDyT3wwTpxhE0TkcF/Og==}
+ '@oxc-minify/binding-linux-arm64-gnu@0.112.0':
+ resolution: {integrity: sha512-gySS5XqU5MKs/oCjsTlVm8zb8lqcNKHEANsaRmhW2qvGKJoeGwFb6Fbq6TLCZMRuk143mLbncbverBCa1c3dog==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-arm64-musl@0.110.0':
- resolution: {integrity: sha512-53GjCVY8kvymk9P6qNDh6zyblcehF5QHstq9QgCjv13ONGRnSHjeds0PxIwiihD7h295bxsWs84DN39syLPH4Q==}
+ '@oxc-minify/binding-linux-arm64-musl@0.112.0':
+ resolution: {integrity: sha512-IRFMZX589lr3rjG0jc8N261/7wqFq2Vl0OMrJWeFls5BF8HiB+fRYuf0Zy2CyRH6NCY2vbdDdp+QCAavQGVsGw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-minify/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxc-minify/binding-linux-ppc64-gnu@0.110.0':
- resolution: {integrity: sha512-li8XcN81dxbJDMBESnTgGhoiAQ+CNIdM0QGscZ4duVPjCry1RpX+5FJySFbGqG3pk4s9ZzlL/vtQtbRzZIZOzg==}
+ '@oxc-minify/binding-linux-ppc64-gnu@0.112.0':
+ resolution: {integrity: sha512-V/69XqIW9hCUceDpcZh79oDg+F4ptEgIfKRENzYs41LRbSoJ7sNjjcW4zifqyviTvzcnXLgK4uoTyoymmNZBMQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-riscv64-gnu@0.110.0':
- resolution: {integrity: sha512-SweKfsnLKShu6UFV8mwuj1d1wmlNoL/FlAxPUzwjEBgwiT2HQkY24KnjBH+TIA+//1O83kzmWKvvs4OuEhdIEQ==}
+ '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.112.0':
+ resolution: {integrity: sha512-zghvexySyGXGNW+MutjZN7UGTyOQl56RWMlPe1gb+knBm/+0hf9qjk7Q6ofm2tSte+vQolPfQttifGl0dP9uvQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-riscv64-musl@0.110.0':
- resolution: {integrity: sha512-oH8G4aFMP8XyTsEpdANC5PQyHgSeGlopHZuW1rpyYcaErg5YaK0vXjQ4EM5HVvPm+feBV24JjxgakTnZoF3aOQ==}
+ '@oxc-minify/binding-linux-riscv64-musl@0.112.0':
+ resolution: {integrity: sha512-E4a8VUFDJPb2mPcc7J4NQQPi1ssHKF7/g4r6KD2+SBVERIaEEd3cGNqR7SG3g82/BLGV2UDoQe/WvZCkt5M/bQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxc-minify/binding-linux-s390x-gnu@0.110.0':
- resolution: {integrity: sha512-W9na+Vza7XVUlpf8wMt4QBfH35KeTENEmnpPUq3NSlbQHz8lSlSvhAafvo43NcKvHAXV3ckD/mUf2VkqSdbklg==}
+ '@oxc-minify/binding-linux-s390x-gnu@0.112.0':
+ resolution: {integrity: sha512-2Hx87sK3y6jBV364Mvv0zyxiITIuy26Ixenv6pK7e+4an3HgNdhAj8nk3aLoLTTSvLik5/MaGhcZGEu9tYV1aA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-x64-gnu@0.110.0':
- resolution: {integrity: sha512-XJdA4mmmXOjJxSRgNJXsDP7Xe8h3gQhmb56hUcCrvq5d+h5UcEi2pR8rxsdIrS8QmkLuBA3eHkGK8E27D7DTgQ==}
+ '@oxc-minify/binding-linux-x64-gnu@0.112.0':
+ resolution: {integrity: sha512-2MSCnEPLk9ddSouMhJo78Xy2/JbYC80OYzWdR4yWTGSULsgH3d1VXg73DSwFL8vU7Ad9oK10DioBY2ww7sQTEg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxc-minify/binding-linux-x64-musl@0.110.0':
- resolution: {integrity: sha512-QqzvALuOTtSckI8x467R4GNArzYDb/yEh6aNzLoeaY1O7vfT7SPDwlOEcchaTznutpeS9Dy8gUS/AfqtUHaufw==}
+ '@oxc-minify/binding-linux-x64-musl@0.112.0':
+ resolution: {integrity: sha512-HAPfmQKlkVi97/zRonVE9t/kKUG3ni+mOuU1Euw+3s37KwUuOJjmcwXdclVgXKBlTkCGO0FajPwW5dAJeIXCCw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-minify/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxc-minify/binding-openharmony-arm64@0.110.0':
- resolution: {integrity: sha512-gAMssLs2Q3+uhLZxanh1DF+27Kaug3cf4PXb9AB7XK81DR+LVcKySXaoGYoOs20Co0fFSphd6rRzKge2qDK3dA==}
+ '@oxc-minify/binding-openharmony-arm64@0.112.0':
+ resolution: {integrity: sha512-bLnMojcPadYzMNpB6IAqMiTOag4etc0zbs8On73JsotO1W5c5/j/ncplpSokpEpNasKRUpHVRXpmq0KRXprNhw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-minify/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxc-minify/binding-wasm32-wasi@0.110.0':
- resolution: {integrity: sha512-7Wqi5Zjl022bs2zXq+ICdalDPeDuCH/Nhbi8q2isLihAonMVIT0YH2hqqnNEylRNGYck+FJ6gRZwMpGCgrNxPg==}
+ '@oxc-minify/binding-wasm32-wasi@0.112.0':
+ resolution: {integrity: sha512-tv7PmHYq/8QBlqMaDjsy51GF5KQkG17Yc/PsgB5OVndU34kwbQuebBIic7UfK9ygzidI8moYq3ztnu3za/rqHw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-minify/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-minify/binding-win32-arm64-msvc@0.110.0':
- resolution: {integrity: sha512-ZPx+0Tj4dqn41ecyoGotlvekQKy6JxJCixn9Rw7h/dafZ3eDuBcEVh3c2ZoldXXsyMIt5ywI8IWzFZsjNedd5Q==}
+ '@oxc-minify/binding-win32-arm64-msvc@0.112.0':
+ resolution: {integrity: sha512-d+jes2jwRkcBSpcaZC6cL8GBi56Br6uAorn9dfquhWLczWL+hHSvvVrRgT1i5/6dkf5UWx2zdoEsAMiJ11w78A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@oxc-minify/binding-win32-ia32-msvc@0.110.0':
- resolution: {integrity: sha512-H0Oyd3RWBfpEyvJIrFK94RYiY7KKSQl11Ym7LMDwLEagelIAfRCkt1amHZhFa/S3ZRoaOJFXzEw4YKeSsjVFsg==}
+ '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ia32]
+ cpu: [arm64]
os: [win32]
- '@oxc-minify/binding-win32-x64-msvc@0.110.0':
- resolution: {integrity: sha512-Hr3nK90+qXKJ2kepXwFIcNfQQIOBecB4FFCyaMMypthoEEhVP08heRynj4eSXZ8NL9hLjs3fQzH8PJXfpznRnQ==}
+ '@oxc-minify/binding-win32-ia32-msvc@0.112.0':
+ resolution: {integrity: sha512-TV1C3qDwj7//jNIi5tnNRhReSUgtaRQKi5KobDE6zVAc5gjeuBA8G2qizS9ziXlf/I0dlelrGmGMMDJmH9ekWg==}
engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-minify/binding-win32-x64-msvc@0.112.0':
+ resolution: {integrity: sha512-LML2Gld6VY8/+7a3VH4k1qngsBXvTkXgbmYgSYwaElqtiQiYaAcXfi0XKOUGe3k3GbBK4juAGixC31CrdFHAQw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-minify/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
os: [win32]
- '@oxc-parser/binding-android-arm-eabi@0.110.0':
- resolution: {integrity: sha512-g6+kHTI/BRDJszaZkSgyu0pGuMIVYJ7/v0I4C9BkTeGn1LxF9GWI6jE22dBEELXMWbG7FTyNlD9RCuWlStAx6w==}
+ '@oxc-parser/binding-android-arm-eabi@0.112.0':
+ resolution: {integrity: sha512-retxBzJ39Da7Lh/eZTn9+HJgTeDUxZIpuI0urOsmcFsBKXAth3lc1jIvwseQ9qbAI/VrsoFOXiGIzgclARbAHg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxc-parser/binding-android-arm64@0.110.0':
- resolution: {integrity: sha512-tbr+uWFVUN6p9LYlR0cPyFA24HWlnRYU+oldWlEGis/tdMtya3BubQcKdylhFhhDLaW6ChCJfxogQranElGVsw==}
+ '@oxc-parser/binding-android-arm64@0.112.0':
+ resolution: {integrity: sha512-pRkbBRbuIIsufUWpOJ+JHWfJFNupkidy4sbjfcm37e6xwYrn9LSKMLubPHvNaL1Zf92ZRhGiwaYkEcmaFg2VcA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
@@ -1240,8 +1621,14 @@ packages:
cpu: [arm64]
os: [android]
- '@oxc-parser/binding-darwin-arm64@0.110.0':
- resolution: {integrity: sha512-jPBsXPc8hwmsUQyLMg7a5Ll/j/8rWCDFoB8WzLP6C0qQKX0zWQxbfSdLFg9GGNPuRo8J8ma9WfBQN5RmbFxNJA==}
+ '@oxc-parser/binding-darwin-arm64@0.112.0':
+ resolution: {integrity: sha512-fh6/KQL/cbH5DukT3VkdCqnULLuvVnszVKySD5IgSE0WZb32YZo/cPsPdEv052kk6w3N4agu+NTiMnZjcvhUIg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
@@ -1252,8 +1639,14 @@ packages:
cpu: [arm64]
os: [darwin]
- '@oxc-parser/binding-darwin-x64@0.110.0':
- resolution: {integrity: sha512-jt5G1eZj4sdMGc7Q0c6kfPRmqY1Mn3yzo6xuRr8EXozkh93O8KGFflABY7t56WIrmP+cloaCQkLcjlm6vdhzcQ==}
+ '@oxc-parser/binding-darwin-x64@0.112.0':
+ resolution: {integrity: sha512-vUBOOY1E30vlu/DoTGDoT1UbLlwu5Yv9tqeBabAwRzwNDz8Skho16VKhsBDUiyqddtpsR3//v6vNk38w4c+6IA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
@@ -1264,8 +1657,14 @@ packages:
cpu: [x64]
os: [darwin]
- '@oxc-parser/binding-freebsd-x64@0.110.0':
- resolution: {integrity: sha512-VJ7Hwf4dg7uf8b/DrLEhE6lgnNTfBZbTqXQBG3n0oCBoreE1c5aWf1la+o7fJjjTpACRts/vAZ2ngFNNqEFpJw==}
+ '@oxc-parser/binding-freebsd-x64@0.112.0':
+ resolution: {integrity: sha512-hnEtO/9AVnYWzrgnp6L+oPs/6UqlFeteUL6n7magkd2tttgmx1C01hyNNh6nTpZfLzEVJSNJ0S+4NTsK2q2CxA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-parser/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
@@ -1276,8 +1675,14 @@ packages:
cpu: [x64]
os: [freebsd]
- '@oxc-parser/binding-linux-arm-gnueabihf@0.110.0':
- resolution: {integrity: sha512-w3OZ0pLKktM7k4qEbVj3dHnCvSMFnWugYxHfhpwncYUOxwDNL3mw++EOIrw997QYiEuJ+H6Od8K6mbj1p6Ae8w==}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.112.0':
+ resolution: {integrity: sha512-WxJrUz3pcIc2hp4lvJbvt/sTL33oX9NPvkD3vDDybE6tc0V++rS+hNOJxwXdD2FDIFPkHs/IEn5asEZFVH+VKw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
@@ -1288,8 +1693,14 @@ packages:
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm-musleabihf@0.110.0':
- resolution: {integrity: sha512-BIaoW4W6QKb8Q6p3DErDtsAuDRAnr0W+gtwo7fQQkbAJpoPII0ZJXZn+tcQGCyNGKWSsilRNWHyd/XZfXXXpzw==}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.112.0':
+ resolution: {integrity: sha512-jj8A8WWySaJQqM9XKAIG8U2Q3qxhFQKrXPWv98d1oC35at+L1h+C+V4M3l8BAKhpHKCu3dYlloaAbHd5q1Hw6A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
@@ -1300,8 +1711,15 @@ packages:
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm64-gnu@0.110.0':
- resolution: {integrity: sha512-3EQDJze28t0HdxXjMKBU6utNscXJePg2YV0Kd/ZnHx24VcIyfkNH6NKzBh0NeaWHovDTkpzYHPtF2tOevtbbfw==}
+ '@oxc-parser/binding-linux-arm64-gnu@0.112.0':
+ resolution: {integrity: sha512-G2F8H6FcAExVK5vvhpSh61tqWx5QoaXXUnSsj5FyuDiFT/K7AMMVSQVqnZREDc+YxhrjB0vnKjCcuobXK63kIw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -1314,8 +1732,15 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-arm64-musl@0.110.0':
- resolution: {integrity: sha512-5xwm1hPrGGvjCVtTWNGJ39MmQGnyipoIDShneGBgSrnDh0XX+COAO7AZKajgNipqgNq5rGEItpzFkMtSDyx0bQ==}
+ '@oxc-parser/binding-linux-arm64-musl@0.112.0':
+ resolution: {integrity: sha512-3R0iqjM3xYOZCnwgcxOQXH7hrz64/USDIuLbNTM1kZqQzRqaR4w7SwoWKU934zABo8d0op2oSwOp+CV3hZnM7A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -1328,15 +1753,29 @@ packages:
os: [linux]
libc: [musl]
- '@oxc-parser/binding-linux-ppc64-gnu@0.110.0':
- resolution: {integrity: sha512-I8Xop7z+enuvW1xe0AcRQ9XqFNkUYgeXusyGjCyW6TstRb62P90h+nL1AoGaUMy0E0518DJam5vRYVRgXaAzYg==}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.112.0':
+ resolution: {integrity: sha512-lAQf8PQxfgy7h0bmcfSVE3hg3qMueshPYULFsCrHM+8KefGZ9W+ZMvRyU33gLrB4w1O3Fz1orR0hmKMCRxXNrQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-riscv64-gnu@0.110.0':
- resolution: {integrity: sha512-XPM0jpght/AuHnweNaIo0twpId6rWFs8NrTkMijxcsRQMzNBeSQQgYm9ErrutmKQS6gb8XNAEIkYXHgPmhdDPg==}
+ '@oxc-parser/binding-linux-riscv64-gnu@0.112.0':
+ resolution: {integrity: sha512-2QlvQBUhHuAE3ezD4X3CAEKMXdfgInggQ5Bj/7gb5NcYP3GyfLTj7c+mMu+BRwfC9B3AXBNyqHWbqEuuUvZyRQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
@@ -1349,15 +1788,29 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-riscv64-musl@0.110.0':
- resolution: {integrity: sha512-ylJIuJyMzAqR191QeCwZLEkyo4Sx817TNILjNhT0W1EDQusGicOYKSsGXM/2DHCNYGcidV+MQ8pUVzNeVmuM6g==}
+ '@oxc-parser/binding-linux-riscv64-musl@0.112.0':
+ resolution: {integrity: sha512-v06iu0osHszgqJ1dLQRb6leWFU1sjG/UQk4MoVBtE6ZPewgfTkby6G9II1SpEAf2onnAuQceVYxQH9iuU3NJqw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxc-parser/binding-linux-s390x-gnu@0.110.0':
- resolution: {integrity: sha512-DL6oR0PfYor9tBX9xlAxMUVwfm6+sKTL4H+KiQ6JKP3xkJTwBIdDCgeN2AjMht1D3N40uUwVq3v8/2fqnZRgLQ==}
+ '@oxc-parser/binding-linux-s390x-gnu@0.112.0':
+ resolution: {integrity: sha512-+5HhNHtxsdcd7+ljXFnn9FOoCNXJX3UPgIfIE6vdwS1HqdGNH6eAcVobuqGOp54l8pvcxDQA6F4cPswCgLrQfQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
@@ -1370,8 +1823,15 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-x64-gnu@0.110.0':
- resolution: {integrity: sha512-+e6ws5JLpFehdK+wh6q8icx1iM3Ao+9dtItVWFcRiXxSvGcIlS9viWcMvXKrmcsyVDUf81dnvuMSBigNslxhIQ==}
+ '@oxc-parser/binding-linux-x64-gnu@0.112.0':
+ resolution: {integrity: sha512-jKwO7ZLNkjxwg7FoCLw+fJszooL9yXRZsDN0AQ1AQUTWq1l8GH/2e44k68N3fcP19jl8O8jGpqLAZcQTYk6skA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -1384,8 +1844,15 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-x64-musl@0.110.0':
- resolution: {integrity: sha512-6DiYhVdXKOzB01+j/tyrB6/d2o6b4XYFQvcbBRNbVHIimS6nl992y3V3mGG3NaA+uCZAzhT3M3btTdKAxE4A3A==}
+ '@oxc-parser/binding-linux-x64-musl@0.112.0':
+ resolution: {integrity: sha512-TYqnuKV/p3eOc+N61E0961nA7DC+gaCeJ3+V2LcjJdTwFMdikqWL6uVk1jlrpUCBrozHDATVUKDZYH7r4FQYjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -1398,14 +1865,25 @@ packages:
os: [linux]
libc: [musl]
- '@oxc-parser/binding-openharmony-arm64@0.110.0':
- resolution: {integrity: sha512-U9KEK7tXdHrXl2eZpoHYGWj31ZSvdGiaXwjkJzeRN0elt89PXi+VcryRh6BAFbEz1EQpTteyMDwDXMgJVWM85A==}
+ '@oxc-parser/binding-openharmony-arm64@0.112.0':
+ resolution: {integrity: sha512-ZhrVmWFifVEFQX4XPwLoVFDHw9tAWH9p9vHsHFH+5uCKdfVR+jje4WxVo6YrokWCboGckoOzHq5KKMOcPZfkRg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-parser/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxc-parser/binding-wasm32-wasi@0.110.0':
- resolution: {integrity: sha512-cK2j/GbXGxP7k4qDM0OGjkbPrIOj8n9+U/27joH/M19z+jrQ5u1lvlvbAK/Aw2LnqE0waADnnuAc0MFab+Ea8w==}
+ '@oxc-parser/binding-wasm32-wasi@0.112.0':
+ resolution: {integrity: sha512-Gr8X2PUU3hX1g3F5oLWIZB8DhzDmjr5TfOrmn5tlBOo9l8ojPGdKjnIBfObM7X15928vza8QRKW25RTR7jfivg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-parser/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
@@ -1414,8 +1892,14 @@ packages:
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-parser/binding-win32-arm64-msvc@0.110.0':
- resolution: {integrity: sha512-ZW393ysGT5oZeGJRyw2JAz4tIfyTjVCSxuZoh8e+7J7e0QPDH/SAmyxJXb/aMxarIVa3OcYZ5p/Q6eooHZ0i1Q==}
+ '@oxc-parser/binding-win32-arm64-msvc@0.112.0':
+ resolution: {integrity: sha512-t5CDLbU70Ea88bGRhvU/dLJTc/Wcrtf2Jp534E8P3cgjAvHDjdKsfDDqBZrhybJ8Jv9v9vW5ngE40EK51BluDA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
@@ -1426,14 +1910,26 @@ packages:
cpu: [arm64]
os: [win32]
- '@oxc-parser/binding-win32-ia32-msvc@0.110.0':
- resolution: {integrity: sha512-NM50LT1PEnlMlw+z/TFVkWaDOF/s5DRHbU3XhEESNhDDT9qYA8N9B1V/FYxVr1ngu28JGK2HtkjpWKlKoF4E2Q==}
+ '@oxc-parser/binding-win32-ia32-msvc@0.112.0':
+ resolution: {integrity: sha512-rZH0JynCCwnhe2HfRoyNOl/Kfd9pudoWxgpC5OZhj7j77pMK0UOAa35hYDfrtSOUk2HLzrikV5dPUOY2DpSBSA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxc-parser/binding-win32-x64-msvc@0.110.0':
- resolution: {integrity: sha512-w1SzoXNaY59tbTz8/YhImByuj7kXP5EfPtv4+PPwPrvLrOWt8BOpK0wN8ysXqyWCdHv9vS1UBRrNd/aSp4Dy8A==}
+ '@oxc-parser/binding-win32-x64-msvc@0.112.0':
+ resolution: {integrity: sha512-oGHluohzmVFAuQrkEnl1OXAxMz2aYmimxUqIgKXpBgbr7PvFv0doELB273sX+5V3fKeggohKg1A2Qq21W9Z9cQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -1444,20 +1940,35 @@ packages:
cpu: [x64]
os: [win32]
- '@oxc-project/types@0.110.0':
- resolution: {integrity: sha512-6Ct21OIlrEnFEJk5LT4e63pk3btsI6/TusD/GStLi7wYlGJNOl1GI9qvXAnRAxQU9zqA2Oz+UwhfTOU2rPZVow==}
+ '@oxc-project/types@0.112.0':
+ resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==}
+
+ '@oxc-project/types@0.117.0':
+ resolution: {integrity: sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w==}
'@oxc-project/types@0.95.0':
resolution: {integrity: sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==}
- '@oxc-transform/binding-android-arm-eabi@0.110.0':
- resolution: {integrity: sha512-sE9dxvqqAax1YYJ3t7j+h5ZSI9jl6dYuDfngl6ieZUrIy5P89/8JKVgAzgp8o3wQSo7ndpJvYsi1K4ZqrmbP7w==}
+ '@oxc-transform/binding-android-arm-eabi@0.112.0':
+ resolution: {integrity: sha512-r4LuBaPnOAi0eUOBNi880Fm2tO2omH7N1FRrL6+nyz/AjQ+QPPLtoyZJva0O+sKi1buyN/7IzM5p9m+5ANSDbg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-transform/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxc-transform/binding-android-arm64@0.110.0':
- resolution: {integrity: sha512-nqtbP4aMCtsCZ6qpHlHaQoWVHSBtlKzwaAgwEOvR+9DWqHjk31BHvpGiDXlMeed6CVNpl3lCbWgygb3RcSjcfw==}
+ '@oxc-transform/binding-android-arm64@0.112.0':
+ resolution: {integrity: sha512-ve46vQcQrY8eGe8990VSlS9gkD+AogJqbtfOkeua+5sQGQTDgeIRRxOm7ktCo19uZc2bEBwXRJITgosd+NRVmQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-transform/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
@@ -1468,8 +1979,14 @@ packages:
cpu: [arm64]
os: [android]
- '@oxc-transform/binding-darwin-arm64@0.110.0':
- resolution: {integrity: sha512-oeSeHnL4Z4cMXtc8V0/rwoVn0dgwlS9q0j6LcHn9dIhtFEdp3W0iSBF8YmMQA+E7sILeLDjsHmHE4Kp0sOScXw==}
+ '@oxc-transform/binding-darwin-arm64@0.112.0':
+ resolution: {integrity: sha512-ddbmLU3Tr+i7MOynfwAXxUXud3SjJKlv7XNjaq08qiI8Av/QvhXVGc2bMhXkWQSMSBUeTDoiughKjK+Zsb6y/A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-transform/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
@@ -1480,8 +1997,14 @@ packages:
cpu: [arm64]
os: [darwin]
- '@oxc-transform/binding-darwin-x64@0.110.0':
- resolution: {integrity: sha512-nL9K5x7OuZydobAGPylsEW9d4APs2qEkIBLMgQPA+kY8dtVD3IR87QsTbs4l4DBQYyun/+ay6qVCDlxqxdX2Jg==}
+ '@oxc-transform/binding-darwin-x64@0.112.0':
+ resolution: {integrity: sha512-TKvmNw96jQZPqYb4pRrzLFDailNB3YS14KNn+x2hwRbqc6CqY96S9PYwyOpVpYdxfoRjYO9WgX9SoS+62a1DPA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-transform/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
@@ -1492,8 +2015,14 @@ packages:
cpu: [x64]
os: [darwin]
- '@oxc-transform/binding-freebsd-x64@0.110.0':
- resolution: {integrity: sha512-GS29zXXirDQhZEUq8xKJ1azAWMuUy3Ih3W5Bc5ddk12LRthO5wRLFcKIyeHpAXCoXymQ+LmxbMtbPf84GPxouw==}
+ '@oxc-transform/binding-freebsd-x64@0.112.0':
+ resolution: {integrity: sha512-YPMkSCDaelO8HHYRMYjm+Q+IfkfIbdtQzwPuasItYkq8UUkNeHNPheNh2JkvQa3c+io3E9ePOgHQ2yihpk7o/Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-transform/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
@@ -1504,8 +2033,14 @@ packages:
cpu: [x64]
os: [freebsd]
- '@oxc-transform/binding-linux-arm-gnueabihf@0.110.0':
- resolution: {integrity: sha512-glzDHak8ISyZJemCUi7RCvzNSl+MQ1ly9RceT2qRufhUsvNZ4C/2QLJ1HJwd2N6E88bO4laYn+RofdRzNnGGEA==}
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0':
+ resolution: {integrity: sha512-nA7kzQGNEpuTRknst/IJ3l8hqmDmEda3aun6jkXgp7gKxESjuHeaNH04mKISxvJ7fIacvP2g/wtTSnm4u5jL8Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
@@ -1516,8 +2051,14 @@ packages:
cpu: [arm]
os: [linux]
- '@oxc-transform/binding-linux-arm-musleabihf@0.110.0':
- resolution: {integrity: sha512-8JThvgJ2FRoTVfbp7e4wqeZqCZbtudM06SfZmNzND9kPNu/LVYygIR+72RWs+xm4bWkuYHg/islo/boNPtMT5Q==}
+ '@oxc-transform/binding-linux-arm-musleabihf@0.112.0':
+ resolution: {integrity: sha512-w8GuLmckKlGc3YujaZKhtbFxziCcosvM2l9GnQjCb/yENWLGDiyQOy0BTAgPGdJwpYTiOeJblEXSuXYvlE1Ong==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
@@ -1528,8 +2069,15 @@ packages:
cpu: [arm]
os: [linux]
- '@oxc-transform/binding-linux-arm64-gnu@0.110.0':
- resolution: {integrity: sha512-IRh21Ub/g4bkHoErZ0AUWMlWfoZaS0A6EaOVtbcY70RSYIMlrsbjiFwJCzM+b/1DD1rXbH5tsGcH7GweTbfRqg==}
+ '@oxc-transform/binding-linux-arm64-gnu@0.112.0':
+ resolution: {integrity: sha512-9LwwGnJ8+WT0rXcrI8M0RJtDNt91eMqcDPPEvJxhRFHIMcHTy5D5xT+fOl3Us0yMqKo3HUWkbfUYqAp4GoZ3Jw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -1542,8 +2090,15 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-arm64-musl@0.110.0':
- resolution: {integrity: sha512-e5JN94/oy+wevk76q+LMr+2klTTcO60uXa+Wkq558Ms7mdF2TvkKFI++d/JeiuIwJLTi/BxQ4qdT5FWcsHM/ug==}
+ '@oxc-transform/binding-linux-arm64-musl@0.112.0':
+ resolution: {integrity: sha512-Lg6VOuSd3oXv7J0eGywgqh/086h+qQzIBOD+47pYKMTTJcbDe+f3h/RgGoMKJE5HhiwT5sH1aGEJfIfaYUiVSw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-transform/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
@@ -1556,15 +2111,29 @@ packages:
os: [linux]
libc: [musl]
- '@oxc-transform/binding-linux-ppc64-gnu@0.110.0':
- resolution: {integrity: sha512-Y3/Tnnz1GvDpmv8FXBIKtdZPsdZklOEPdrL6NHrN5i2u54BOkybFaDSptgWF53wOrJlTrcmAVSE6fRKK9XCM2Q==}
+ '@oxc-transform/binding-linux-ppc64-gnu@0.112.0':
+ resolution: {integrity: sha512-PXzmj82o1moA4IGphYImTRgc2youTi4VRfyFX3CHwLjxPcQ5JtcsgbDt4QUdOzXZ+zC07s5jf2ZzhRapEOlj2w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-riscv64-gnu@0.110.0':
- resolution: {integrity: sha512-Y0E35iA9/v9jlkNcP6tMJ+ZFOS0rLsWDqG6rU9z+X2R3fBFJBO9UARIK6ngx8upxk81y1TFR2CmBFhupfYdH6Q==}
+ '@oxc-transform/binding-linux-riscv64-gnu@0.112.0':
+ resolution: {integrity: sha512-vhJsMsVH/6xwa3bt1LGts33FXUkGjaEGDwsRyp4lIfOjSfQVWMtCmWMFNaA0dW9FVWdD2Gt2fSFBSZ+azDxlpg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
@@ -1577,15 +2146,29 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-riscv64-musl@0.110.0':
- resolution: {integrity: sha512-JOUSYFfHjBUs7xp2FHmZHb8eTYD/oEu0NklS6JgUauqnoXZHiTLPLVW2o2uVCqldnabYHcomuwI2iqVFYJNhTw==}
+ '@oxc-transform/binding-linux-riscv64-musl@0.112.0':
+ resolution: {integrity: sha512-cXWFb7z+2IjFUEcXtRwluq9oEG5qnyFCjiu3SWrgYNcWwPdHusv3I/7K5/CTbbi4StoZ5txbi7/iSfDHNyWuRw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxc-transform/binding-linux-s390x-gnu@0.110.0':
- resolution: {integrity: sha512-7blgoXF9D3Ngzb7eun23pNrHJpoV/TtE6LObwlZ3Nmb4oZ6Z+yMvBVaoW68NarbmvNGfZ95zrOjgm6cVETLYBA==}
+ '@oxc-transform/binding-linux-s390x-gnu@0.112.0':
+ resolution: {integrity: sha512-eEFu4SRqJTJ20/88KRWmp+jpHKAw0Y1DsnSgpEeXyBIIcsOaLIUMU/TfYWUmqRbvbMV9rmOmI3kp5xWYUq6kSQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
@@ -1598,8 +2181,15 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-x64-gnu@0.110.0':
- resolution: {integrity: sha512-YQ2joGWCVDZVEU2cD/r/w49hVjDm/Qu1BvC/7zs8LvprzdLS/HyMXGF2oA0puw0b+AqgYaz3bhwKB2xexHyITQ==}
+ '@oxc-transform/binding-linux-x64-gnu@0.112.0':
+ resolution: {integrity: sha512-ST1MDT+TlOyZ1c5btrGinRSUW2Jf4Pa+0gdKwsyjDSOC3dxy2ZNkN3mosTf4ywc3J+mxfYKqtjs7zSwHz03ILA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -1612,8 +2202,15 @@ packages:
os: [linux]
libc: [glibc]
- '@oxc-transform/binding-linux-x64-musl@0.110.0':
- resolution: {integrity: sha512-fkjr5qE632ULmNgvFXWDR/8668WxERz3tU7TQFp6JebPBneColitjSkdx6VKNVXEoMmQnOvBIGeP5tUNT384oA==}
+ '@oxc-transform/binding-linux-x64-musl@0.112.0':
+ resolution: {integrity: sha512-ISQoA3pD4cyTGpf9sXXeerH6pL2L6EIpdy6oAy2ttkswyVFDyQNVOVIGIdLZDgbpmqGljxZnWqt/J/N68pQaig==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-transform/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
@@ -1626,14 +2223,25 @@ packages:
os: [linux]
libc: [musl]
- '@oxc-transform/binding-openharmony-arm64@0.110.0':
- resolution: {integrity: sha512-HWH9Zj+lMrdSTqFRCZsvDWMz7OnMjbdGsm3xURXWfRZpuaz0bVvyuZNDQXc4FyyhRDsemICaJbU1bgeIpUJDGw==}
+ '@oxc-transform/binding-openharmony-arm64@0.112.0':
+ resolution: {integrity: sha512-UOGVrGIv7yLJovyEXEyUTADuLq98vd/cbMHFLJweRXD+11I8Tn4jASi4WzdsN8C3BVYGRHrXH2NlSBmhz33a4g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-transform/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxc-transform/binding-wasm32-wasi@0.110.0':
- resolution: {integrity: sha512-ejdxHmYfIcHDPhZUe3WklViLt9mDEJE5BzcW7+R1vc5i/5JFA8D0l7NUSsHBJ7FB8Bu9gF+5iMDm6cXGAgaghw==}
+ '@oxc-transform/binding-wasm32-wasi@0.112.0':
+ resolution: {integrity: sha512-XIX7Gpq9koAvzBVHDlVFHM79r5uOVK6kTEsdsN4qaajpjkgtv4tdsAOKIYK6l7fUbsbE6xS+6w1+yRFrDeC1kg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-transform/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
@@ -1642,8 +2250,14 @@ packages:
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@oxc-transform/binding-win32-arm64-msvc@0.110.0':
- resolution: {integrity: sha512-9VTwpXCZs7xkV+mKhQ62dVk7KLnLXtEUxNS2T4nLz3iMl1IJbA4h5oltK0JoobtiUAnbkV53QmMVGW8+Nh3bDQ==}
+ '@oxc-transform/binding-win32-arm64-msvc@0.112.0':
+ resolution: {integrity: sha512-EgXef9kOne9BNsbYBbuRqxk2hteT0xsAGcx/VbtCBMJYNj8fANFhT271DUSOgfa4DAgrQQmsyt/Kr1aV9mpU9w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
@@ -1654,14 +2268,26 @@ packages:
cpu: [arm64]
os: [win32]
- '@oxc-transform/binding-win32-ia32-msvc@0.110.0':
- resolution: {integrity: sha512-5y0fzuNON7/F2hh2P94vANFaRPJ/3DI1hVl5rseCT8VUVqOGIjWaza0YS/D1g6t1WwycW2LWDMi2raOKoWU5GQ==}
+ '@oxc-transform/binding-win32-ia32-msvc@0.112.0':
+ resolution: {integrity: sha512-6QaB0qjNaou2YR+blncHdw7j0e26IOwOIjLbhVGDeuf9+4rjJeiqRXJ2hOtCcS4zblnao/MjdgQuZ3fM0nl+Kw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxc-transform/binding-win32-x64-msvc@0.110.0':
- resolution: {integrity: sha512-QROrowwlrApI1fEScMknGWKM6GTM/Z2xwMnDqvSaEmzNazBsDUlE08Jasw610hFEsYAVU2K5sp/YaCa9ORdP4A==}
+ '@oxc-transform/binding-win32-x64-msvc@0.112.0':
+ resolution: {integrity: sha512-FRKYlY959QeqRPx9kXs0HjU2xuXPT1cdF+vvA200D9uAX/KLcC34MwRqUKTYml4kCc2Vf/P2pBR9cQuBm3zECQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-transform/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -1672,6 +2298,9 @@ packages:
cpu: [x64]
os: [win32]
+ '@package-json/types@0.0.12':
+ resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==}
+
'@parcel/watcher-android-arm64@2.5.6':
resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
engines: {node: '>= 10.0.0'}
@@ -1781,8 +2410,8 @@ packages:
'@poppinss/colors@4.1.6':
resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
- '@poppinss/dumper@0.6.5':
- resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==}
+ '@poppinss/dumper@0.7.0':
+ resolution: {integrity: sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==}
'@poppinss/exception@1.2.3':
resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
@@ -1790,12 +2419,15 @@ packages:
'@remirror/core-constants@3.0.0':
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
- '@rolldown/pluginutils@1.0.0-beta.53':
- resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
-
'@rolldown/pluginutils@1.0.0-rc.2':
resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==}
+ '@rolldown/pluginutils@1.0.0-rc.8':
+ resolution: {integrity: sha512-wzJwL82/arVfeSP3BLr1oTy40XddjtEdrdgtJ4lLRBu06mP3q/8HGM6K0JRlQuTA3XB0pNJx2so/nmpY4xyOew==}
+
+ '@rolldown/pluginutils@1.0.0-rc.9':
+ resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==}
+
'@rollup/plugin-alias@6.0.0':
resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==}
engines: {node: '>=20.19.0'}
@@ -1805,8 +2437,8 @@ packages:
rollup:
optional: true
- '@rollup/plugin-commonjs@29.0.0':
- resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==}
+ '@rollup/plugin-commonjs@29.0.2':
+ resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==}
engines: {node: '>=16.0.0 || 14 >= 14.17'}
peerDependencies:
rollup: ^2.68.0||^3.0.0||^4.0.0
@@ -1877,168 +2509,204 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.57.1':
- resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==}
+ '@rollup/rollup-android-arm-eabi@4.59.0':
+ resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.57.1':
- resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==}
+ '@rollup/rollup-android-arm64@4.59.0':
+ resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.57.1':
- resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==}
+ '@rollup/rollup-darwin-arm64@4.59.0':
+ resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.57.1':
- resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==}
+ '@rollup/rollup-darwin-x64@4.59.0':
+ resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.57.1':
- resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==}
+ '@rollup/rollup-freebsd-arm64@4.59.0':
+ resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.57.1':
- resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==}
+ '@rollup/rollup-freebsd-x64@4.59.0':
+ resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
- resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==}
cpu: [arm]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm-musleabihf@4.57.1':
- resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==}
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==}
cpu: [arm]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-arm64-gnu@4.57.1':
- resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==}
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-arm64-musl@4.57.1':
- resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==}
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
+ resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-loong64-gnu@4.57.1':
- resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==}
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==}
cpu: [loong64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-loong64-musl@4.57.1':
- resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==}
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
+ resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==}
cpu: [loong64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-ppc64-gnu@4.57.1':
- resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==}
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-ppc64-musl@4.57.1':
- resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==}
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==}
cpu: [ppc64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-riscv64-gnu@4.57.1':
- resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==}
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-riscv64-musl@4.57.1':
- resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==}
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@rollup/rollup-linux-s390x-gnu@4.57.1':
- resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==}
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-gnu@4.57.1':
- resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==}
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@rollup/rollup-linux-x64-musl@4.57.1':
- resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==}
+ '@rollup/rollup-linux-x64-musl@4.59.0':
+ resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==}
cpu: [x64]
os: [linux]
libc: [musl]
- '@rollup/rollup-openbsd-x64@4.57.1':
- resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==}
+ '@rollup/rollup-openbsd-x64@4.59.0':
+ resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==}
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.57.1':
- resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==}
+ '@rollup/rollup-openharmony-arm64@4.59.0':
+ resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.57.1':
- resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==}
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.57.1':
- resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==}
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.57.1':
- resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==}
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.57.1':
- resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==}
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
+ resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==}
cpu: [x64]
os: [win32]
- '@shikijs/core@3.22.0':
- resolution: {integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==}
+ '@shikijs/core@3.23.0':
+ resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==}
- '@shikijs/engine-javascript@3.22.0':
- resolution: {integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==}
+ '@shikijs/core@4.0.2':
+ resolution: {integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw==}
+ engines: {node: '>=20'}
+
+ '@shikijs/engine-javascript@3.23.0':
+ resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==}
+
+ '@shikijs/engine-javascript@4.0.2':
+ resolution: {integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag==}
+ engines: {node: '>=20'}
+
+ '@shikijs/engine-oniguruma@3.23.0':
+ resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==}
+
+ '@shikijs/engine-oniguruma@4.0.2':
+ resolution: {integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg==}
+ engines: {node: '>=20'}
+
+ '@shikijs/langs@3.23.0':
+ resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==}
- '@shikijs/engine-oniguruma@3.22.0':
- resolution: {integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==}
+ '@shikijs/langs@4.0.2':
+ resolution: {integrity: sha512-KaXby5dvoeuZzN0rYQiPMjFoUrz4hgwIE+D6Du9owcHcl6/g16/yT5BQxSW5cGt2MZBz6Hl0YuRqf12omRfUUg==}
+ engines: {node: '>=20'}
+
+ '@shikijs/primitive@4.0.2':
+ resolution: {integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw==}
+ engines: {node: '>=20'}
+
+ '@shikijs/themes@3.23.0':
+ resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==}
- '@shikijs/langs@3.22.0':
- resolution: {integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==}
+ '@shikijs/themes@4.0.2':
+ resolution: {integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA==}
+ engines: {node: '>=20'}
- '@shikijs/themes@3.22.0':
- resolution: {integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==}
+ '@shikijs/transformers@3.23.0':
+ resolution: {integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==}
- '@shikijs/transformers@3.22.0':
- resolution: {integrity: sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==}
+ '@shikijs/types@3.23.0':
+ resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==}
- '@shikijs/types@3.22.0':
- resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==}
+ '@shikijs/types@4.0.2':
+ resolution: {integrity: sha512-qzbeRooUTPnLE+sHD/Z8DStmaDgnbbc/pMrU203950aRqjX/6AFHeDYT+j00y2lPdz0ywJKx7o/7qnqTivtlXg==}
+ engines: {node: '>=20'}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+ '@simple-libs/child-process-utils@1.0.2':
+ resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==}
+ engines: {node: '>=18'}
+
+ '@simple-libs/stream-utils@1.2.0':
+ resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==}
+ engines: {node: '>=18'}
+
'@sindresorhus/base62@1.0.0':
resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
engines: {node: '>=18'}
@@ -2068,78 +2736,78 @@ packages:
'@standard-schema/spec@1.1.0':
resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
- '@stylistic/eslint-plugin@5.7.1':
- resolution: {integrity: sha512-zjTUwIsEfT+k9BmXwq1QEFYsb4afBlsI1AXFyWQBgggMzwBFOuu92pGrE5OFx90IOjNl+lUbQoTG7f8S0PkOdg==}
+ '@stylistic/eslint-plugin@5.10.0':
+ resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '>=9.0.0'
+ eslint: ^9.0.0 || ^10.0.0
- '@swc/helpers@0.5.18':
- resolution: {integrity: sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==}
+ '@swc/helpers@0.5.19':
+ resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==}
- '@tailwindcss/node@4.1.18':
- resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
+ '@tailwindcss/node@4.2.1':
+ resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==}
- '@tailwindcss/oxide-android-arm64@4.1.18':
- resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-android-arm64@4.2.1':
+ resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [android]
- '@tailwindcss/oxide-darwin-arm64@4.1.18':
- resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-darwin-arm64@4.2.1':
+ resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.1.18':
- resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-darwin-x64@4.2.1':
+ resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.1.18':
- resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-freebsd-x64@4.2.1':
+ resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [freebsd]
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
- resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
+ resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==}
+ engines: {node: '>= 20'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
- resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
+ resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
- resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
+ resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
- resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
+ resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@tailwindcss/oxide-linux-x64-musl@4.1.18':
- resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-linux-x64-musl@4.2.1':
+ resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [linux]
libc: [musl]
- '@tailwindcss/oxide-wasm32-wasi@4.1.18':
- resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
+ '@tailwindcss/oxide-wasm32-wasi@4.2.1':
+ resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
@@ -2150,27 +2818,27 @@ packages:
- '@emnapi/wasi-threads'
- tslib
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
- resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
+ resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==}
+ engines: {node: '>= 20'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
- resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
+ resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==}
+ engines: {node: '>= 20'}
cpu: [x64]
os: [win32]
- '@tailwindcss/oxide@4.1.18':
- resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
- engines: {node: '>= 10'}
+ '@tailwindcss/oxide@4.2.1':
+ resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==}
+ engines: {node: '>= 20'}
- '@tailwindcss/postcss@4.1.18':
- resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==}
+ '@tailwindcss/postcss@4.2.1':
+ resolution: {integrity: sha512-OEwGIBnXnj7zJeonOh6ZG9woofIjGrd2BORfvE5p9USYKDCZoQmfqLcfNiRWoJlRWLdNPn2IgVZuWAOM4iTYMw==}
- '@tailwindcss/vite@4.1.18':
- resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==}
+ '@tailwindcss/vite@4.2.1':
+ resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==}
peerDependencies:
vite: ^5.2.0 || ^6 || ^7
@@ -2178,8 +2846,8 @@ packages:
resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
engines: {node: '>=12'}
- '@tanstack/virtual-core@3.13.18':
- resolution: {integrity: sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg==}
+ '@tanstack/virtual-core@3.13.21':
+ resolution: {integrity: sha512-ww+fmLHyCbPSf7JNbWZP3g7wl6SdNo3ah5Aiw+0e9FDErkVHLKprYUrwTm7dF646FtEkN/KkAKPYezxpmvOjxw==}
'@tanstack/vue-table@8.21.3':
resolution: {integrity: sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw==}
@@ -2187,216 +2855,216 @@ packages:
peerDependencies:
vue: '>=3.2'
- '@tanstack/vue-virtual@3.13.18':
- resolution: {integrity: sha512-6pT8HdHtTU5Z+t906cGdCroUNA5wHjFXsNss9gwk7QAr1VNZtz9IQCs2Nhx0gABK48c+OocHl2As+TMg8+Hy4A==}
+ '@tanstack/vue-virtual@3.13.21':
+ resolution: {integrity: sha512-zneUNdQTcUhoDl6+ek+/O4S9gSZRAc2q7VLscZ4WZnFfZcHc3M7OyVCfSDC3hGuwFqzfL8Cx5bZF6zbGCYwXmw==}
peerDependencies:
vue: ^2.7.0 || ^3.0.0
- '@tiptap/core@3.18.0':
- resolution: {integrity: sha512-Gczd4GbK1DNgy/QUPElMVozoa0GW9mW8E31VIi7Q4a9PHHz8PcrxPmuWwtJ2q0PF8MWpOSLuBXoQTWaXZRPRnQ==}
+ '@tiptap/core@3.20.1':
+ resolution: {integrity: sha512-SwkPEWIfaDEZjC8SEIi4kZjqIYUbRgLUHUuQezo5GbphUNC8kM1pi3C3EtoOPtxXrEbY6e4pWEzW54Pcrd+rVA==}
peerDependencies:
- '@tiptap/pm': ^3.18.0
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-blockquote@3.18.0':
- resolution: {integrity: sha512-1HjEoM5vZDfFnq2OodNpW13s56a9pbl7jolUv1V9FrE3X5s7n0HCfDzIVpT7z1HgTdPtlN5oSt5uVyBwuwSUfA==}
+ '@tiptap/extension-blockquote@3.20.1':
+ resolution: {integrity: sha512-WzNXk/63PQI2fav4Ta6P0GmYRyu8Gap1pV3VUqaVK829iJ6Zt1T21xayATHEHWMK27VT1GLPJkx9Ycr2jfDyQw==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-bold@3.18.0':
- resolution: {integrity: sha512-xUgOvHCdGXh9Lfxd7DtgsSr0T/egIwBllWHIBWDjQEQQ0b+ICn+0+i703btHMB4hjdduZtgVDrhK8jAW3U6swA==}
+ '@tiptap/extension-bold@3.20.1':
+ resolution: {integrity: sha512-fz++Qv6Rk/Hov0IYG/r7TJ1Y4zWkuGONe0UN5g0KY32NIMg3HeOHicbi4xsNWTm9uAOl3eawWDkezEMrleObMw==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-bubble-menu@3.18.0':
- resolution: {integrity: sha512-9kYG1fVYQcA3Kp5Bq96lrKCp9oLpQqceDsK688r7iT1yymQlBPMunaqaqb5ZLQGhnNYbhfG+8xcQsvEKjklErA==}
+ '@tiptap/extension-bubble-menu@3.20.1':
+ resolution: {integrity: sha512-XaPvO6aCoWdFnCBus0s88lnj17NR/OopV79i8Qhgz3WMR0vrsL5zsd45l0lZuu9pSvm5VW47SoxakkJiZC1suw==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-bullet-list@3.18.0':
- resolution: {integrity: sha512-8sEpY0nxAGGFDYlF+WVFPKX00X2dAAjmoi0+2eWvK990PdQqwXrQsRs7pkUbpE2mDtATV8+GlDXk9KDkK/ZXhA==}
+ '@tiptap/extension-bullet-list@3.20.1':
+ resolution: {integrity: sha512-mbrlvOZo5OF3vLhp+3fk9KuL/6J/wsN0QxF6ZFRAHzQ9NkJdtdfARcBeBnkWXGN8inB6YxbTGY1/E4lmBkOpOw==}
peerDependencies:
- '@tiptap/extension-list': ^3.18.0
+ '@tiptap/extension-list': ^3.20.1
- '@tiptap/extension-code-block@3.18.0':
- resolution: {integrity: sha512-fCx1oT95ikGfoizw+XCjeglQxlLK4lWgUcB4Dcn5TdaCoFBQMEaZs7Q0jVajxxxULnyArkg60uarc1ac/IF2Hw==}
+ '@tiptap/extension-code-block@3.20.1':
+ resolution: {integrity: sha512-vKejwBq+Nlj4Ybd3qOyDxIQKzYymdNH+8eXkKwGShk2nfLJIxq69DCyGvmuHgipIO1qcYPJ149UNpGN+YGcdmA==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-code@3.18.0':
- resolution: {integrity: sha512-0SU53O0NRmdtRM2Hgzm372dVoHjs2F40o/dtB7ls4kocf4W89FyWeC2R6ZsFQqcXisNh9RTzLtYfbNyizGuZIw==}
+ '@tiptap/extension-code@3.20.1':
+ resolution: {integrity: sha512-509DHINIA/Gg+eTG7TEkfsS8RUiPLH5xZNyLRT0A1oaoaJmECKfrV6aAm05IdfTyqDqz6LW5pbnX6DdUC4keug==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-collaboration@3.18.0':
- resolution: {integrity: sha512-2wTgp41F5ab58buXrPBeerOf0VaW/c1LEx4kAzr72Z6zw0CcDGQYuSZTqE7RLGXxDga6VUi+Ts/U0HvxWpzIWw==}
+ '@tiptap/extension-collaboration@3.20.1':
+ resolution: {integrity: sha512-JnwLvyzrutBffHp6YPnf0XyTnhAgqZ9D8JSUKFp0edvai+dxsb+UMlawesBrgAuoQXw3B8YZUo2VFDVdKas1xQ==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
'@tiptap/y-tiptap': ^3.0.2
yjs: ^13
- '@tiptap/extension-document@3.18.0':
- resolution: {integrity: sha512-e0hOGrjTMpCns8IC5p+c5CEiE1BBmFBFL+RpIxU/fjT2SaZ7q2xsFguBu94lQDT0cD6fdZokFRpGwEMxZNVGCg==}
+ '@tiptap/extension-document@3.20.1':
+ resolution: {integrity: sha512-9vrqdGmRV7bQCSY3NLgu7UhIwgOCDp4sKqMNsoNRX0aZ021QQMTvBQDPkiRkCf7MNsnWrNNnr52PVnULEn3vFQ==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-drag-handle-vue-3@3.18.0':
- resolution: {integrity: sha512-WqviXqMRRAZSmMjvUki5fSI+G9XfzUX7TDxnntN9B3ZyJDMFoJetUVc1+DFpmEQNTD9NmnO3M3o//ugexpT0RA==}
+ '@tiptap/extension-drag-handle-vue-3@3.20.1':
+ resolution: {integrity: sha512-FJonOxcj/I7uBpJBSqfEfU+Fqem5aanEj+EsqG5ZQnxhp7cxbUYZkGH0tBBR7jeIIkt2Jk+1LoCAlYzCWbDLcQ==}
peerDependencies:
- '@tiptap/extension-drag-handle': ^3.18.0
- '@tiptap/pm': ^3.18.0
- '@tiptap/vue-3': ^3.18.0
+ '@tiptap/extension-drag-handle': ^3.20.1
+ '@tiptap/pm': ^3.20.1
+ '@tiptap/vue-3': ^3.20.1
vue: ^3.0.0
- '@tiptap/extension-drag-handle@3.18.0':
- resolution: {integrity: sha512-2nR/SNolRtr+Ix3iRhr8xu2JaLJl61jbyn1X80SYi0pydoLmM2v47ZdVyP6lkQ+UeYluBHl3Quj+ylwOJqmwwg==}
+ '@tiptap/extension-drag-handle@3.20.1':
+ resolution: {integrity: sha512-sIfu5Gt1aZVAagvzr+3Qx+8GE294eU3G6/pYjqNHvf71sDCpdN2gFpeI7WF05foVsCGsH6ieu8x/kTXf5GbNZA==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/extension-collaboration': ^3.18.0
- '@tiptap/extension-node-range': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/extension-collaboration': ^3.20.1
+ '@tiptap/extension-node-range': ^3.20.1
+ '@tiptap/pm': ^3.20.1
'@tiptap/y-tiptap': ^3.0.2
- '@tiptap/extension-dropcursor@3.18.0':
- resolution: {integrity: sha512-pIW/K9fGth221dkfA5SInHcqfnCr0aG9LGkRiEh4gwM4cf6ceUBrvcD+QlemSZ4q9oktNGJmXT+sEXVOQ8QoeQ==}
+ '@tiptap/extension-dropcursor@3.20.1':
+ resolution: {integrity: sha512-K18L9FX4znn+ViPSIbTLOGcIaXMx/gLNwAPE8wPLwswbHhQqdiY1zzdBw6drgOc1Hicvebo2dIoUlSXOZsOEcw==}
peerDependencies:
- '@tiptap/extensions': ^3.18.0
+ '@tiptap/extensions': ^3.20.1
- '@tiptap/extension-floating-menu@3.18.0':
- resolution: {integrity: sha512-a2cBQi0I/X0o3a9b+adwJvkdxLzQzJIkP9dc/v25qGTSCjC1+ycois5WQOn8T4T8t4g/fAH1UOXEWnkWyTxLIg==}
+ '@tiptap/extension-floating-menu@3.20.1':
+ resolution: {integrity: sha512-BeDC6nfOesIMn5pFuUnkEjOxGv80sOJ8uk1mdt9/3Fkvra8cB9NIYYCVtd6PU8oQFmJ8vFqPrRkUWrG5tbqnOg==}
peerDependencies:
'@floating-ui/dom': ^1.0.0
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-gapcursor@3.18.0':
- resolution: {integrity: sha512-covioXPPHX3SnlTwC/1rcHUHAc7/JFd4vN0kZQmZmvGHlxqq2dPmtrPh8D7TuDuhG0k/3Z6i8dJFP0phfRAhuA==}
+ '@tiptap/extension-gapcursor@3.20.1':
+ resolution: {integrity: sha512-kZOtttV6Ai8VUAgEng3h4WKFbtdSNJ6ps7r0cRPY+FctWhVmgNb/JJwwyC+vSilR7nRENAhrA/Cv/RxVlvLw+g==}
peerDependencies:
- '@tiptap/extensions': ^3.18.0
+ '@tiptap/extensions': ^3.20.1
- '@tiptap/extension-hard-break@3.18.0':
- resolution: {integrity: sha512-IXLiOHEmbU2Wn1jFRZC6apMxiJQvSRWhwoiubAvRxyiPSnFTeaEgT8Qgo5DjwB39NckP+o7XX7RrgzlkwdFPQQ==}
+ '@tiptap/extension-hard-break@3.20.1':
+ resolution: {integrity: sha512-9sKpmg/IIdlLXimYWUZ3PplIRcehv4Oc7V1miTqlnAthMzjMqigDkjjgte4JZV67RdnDJTQkRw8TklCAU28Emg==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-heading@3.18.0':
- resolution: {integrity: sha512-MTamVnYsFWVndLSq5PRQ7ZmbF6AExsFS9uIvGtUAwuhzvR4of/WHh6wpvWYjA+BLXTWRrfuGHaZTl7UXBN13fg==}
+ '@tiptap/extension-heading@3.20.1':
+ resolution: {integrity: sha512-unudyfQP6FxnyWinxvPqe/51DG91J6AaJm666RnAubgYMCgym+33kBftx4j4A6qf+ddWYbD00thMNKOnVLjAEQ==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-horizontal-rule@3.18.0':
- resolution: {integrity: sha512-fEq7DwwQZ496RHNbMQypBVNqoWnhDEERbzWMBqlmfCfc/0FvJrHtsQkk3k4lgqMYqmBwym3Wp0SrRYiyKCPGTw==}
+ '@tiptap/extension-horizontal-rule@3.20.1':
+ resolution: {integrity: sha512-rjFKFXNntdl0jay8oIGFvvykHlpyQTLmrH3Ag2fj3i8yh6MVvqhtaDomYQbw5sxECd5hBkL+T4n2d2DRuVw/QQ==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-image@3.18.0':
- resolution: {integrity: sha512-Hc8riY43yPlQDKIpJf/aZ3kw1WNYjJrBH7UZKGQ9cfmUfnKQgN6+bfWgyvtQezDfhvVL6RNKSGNfoYHkV+rJaA==}
+ '@tiptap/extension-image@3.20.1':
+ resolution: {integrity: sha512-/GPFSLNdYSZQ0E6VBXSAk0UFtDdn98HT1Aa2tO+STELqc5jAdFB42dfFnTC6KQzTvcUOUYkE2S1Q22YC5H2XNQ==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-italic@3.18.0':
- resolution: {integrity: sha512-1C4nB08psiRo0BPxAbpYq8peUOKnjQWtBCLPbE6B9ToTK3vmUk0AZTqLO11FvokuM1GF5l2Lg3sKrKFuC2hcjQ==}
+ '@tiptap/extension-italic@3.20.1':
+ resolution: {integrity: sha512-ZYRX13Kt8tR8JOzSXirH3pRpi8x30o7LHxZY58uXBdUvr3tFzOkh03qbN523+diidSVeHP/aMd/+IrplHRkQug==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-link@3.18.0':
- resolution: {integrity: sha512-1J28C4+fKAMQi7q/UsTjAmgmKTnzjExXY98hEBneiVzFDxqF69n7+Vb7nVTNAIhmmJkZMA0DEcMhSiQC/1/u4A==}
+ '@tiptap/extension-link@3.20.1':
+ resolution: {integrity: sha512-oYTTIgsQMqpkSnJAuAc+UtIKMuI4lv9e1y4LfI1iYm6NkEUHhONppU59smhxHLzb3Ww7YpDffbp5IgDTAiJztA==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-list-item@3.18.0':
- resolution: {integrity: sha512-auTSt+NXoUnT0xofzFa+FnXsrW1TPdT1OB3U1OqQCIWkumZqL45A8OK9kpvyQsWj/xJ8fy1iZwFlKXPtxjLd2w==}
+ '@tiptap/extension-list-item@3.20.1':
+ resolution: {integrity: sha512-tzgnyTW82lYJkUnadYbatwkI9dLz/OWRSWuFpQPRje/ItmFMWuQ9c9NDD8qLbXPdEYnvrgSAA+ipCD/1G0qA0Q==}
peerDependencies:
- '@tiptap/extension-list': ^3.18.0
+ '@tiptap/extension-list': ^3.20.1
- '@tiptap/extension-list-keymap@3.18.0':
- resolution: {integrity: sha512-ZzO5r/cW7G0zpL/eM69WPnMpzb0YsSjtI60CYGA0iQDRJnK9INvxu0RU0ewM2faqqwASmtjuNJac+Fjk6scdXg==}
+ '@tiptap/extension-list-keymap@3.20.1':
+ resolution: {integrity: sha512-Dr0xsQKx0XPOgDg7xqoWwfv7FFwZ3WeF3eOjqh3rDXlNHMj1v+UW5cj1HLphrsAZHTrVTn2C+VWPJkMZrSbpvQ==}
peerDependencies:
- '@tiptap/extension-list': ^3.18.0
+ '@tiptap/extension-list': ^3.20.1
- '@tiptap/extension-list@3.18.0':
- resolution: {integrity: sha512-9lQBo45HNqIFcLEHAk+CY3W51eMMxIJjWbthm2CwEWr4PB3+922YELlvq8JcLH1nVFkBVpmBFmQe/GxgnCkzwQ==}
+ '@tiptap/extension-list@3.20.1':
+ resolution: {integrity: sha512-euBRAn0mkV7R2VEE+AuOt3R0j9RHEMFXamPFmtvTo8IInxDClusrm6mJoDjS8gCGAXsQCRiAe1SCQBPgGbOOwg==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-mention@3.18.0':
- resolution: {integrity: sha512-2obPAXksR4I2OwKZKYEoMwKGFEnsANlE83hAILNYGb5oSnDkHj8KHxQKcIutv6G25OLDTfMMh7VE/YUq2iempw==}
+ '@tiptap/extension-mention@3.20.1':
+ resolution: {integrity: sha512-KOGokj7oH1QpcM8P02V+o6wHsVE0g7XEtdIy2vtq2vlFE3npNNNFkMa8F8VWX6qyC+VeVrNU6SIzS5MFY2TORA==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
- '@tiptap/suggestion': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
+ '@tiptap/suggestion': ^3.20.1
- '@tiptap/extension-node-range@3.18.0':
- resolution: {integrity: sha512-aw9m4i1qznQ/HA+bPIZ7CVUOmVUcIBkTNt3IXHMNAuK8NTJr141gnKDtgF4UUCAnpKBXq8F8++VKdBUszvpZZA==}
+ '@tiptap/extension-node-range@3.20.1':
+ resolution: {integrity: sha512-+W/mQJxlkXMcwldWUqwdoR0eniJ1S9cVJoAy2Lkis0NhILZDWVNGKl9J4WFoCOXn8Myr17IllIxRYvAXJJ4FHQ==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/extension-ordered-list@3.18.0':
- resolution: {integrity: sha512-5bUAfklYLS5o6qvLLfreGyGvD1JKXqOQF0YntLyPuCGrXv7+XjPWQL2BmEf59fOn2UPT2syXLQ1WN5MHTArRzg==}
+ '@tiptap/extension-ordered-list@3.20.1':
+ resolution: {integrity: sha512-Y+3Ad7OwAdagqdYwCnbqf7/to5ypD4NnUNHA0TXRCs7cAHRA8AdgPoIcGFpaaSpV86oosNU3yfeJouYeroffog==}
peerDependencies:
- '@tiptap/extension-list': ^3.18.0
+ '@tiptap/extension-list': ^3.20.1
- '@tiptap/extension-paragraph@3.18.0':
- resolution: {integrity: sha512-uvFhdwiur4NhhUdBmDsajxjGAIlg5qga55fYag2DzOXxIQE2M7/aVMRkRpuJzb88GY4EHSh8rY34HgMK2FJt2Q==}
+ '@tiptap/extension-paragraph@3.20.1':
+ resolution: {integrity: sha512-QFrAtXNyv7JSnomMQc1nx5AnG9mMznfbYJAbdOQYVdbLtAzTfiTuNPNbQrufy5ZGtGaHxDCoaygu2QEfzaKG+Q==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-placeholder@3.18.0':
- resolution: {integrity: sha512-jhN1Xa+MpfrTcCYZsFSvZYpUuMutPTC20ms0IsH1yN0y9tbAS+T6PHPC+dsvyAinYdA8yKElM6OO+jpyz4X1cw==}
+ '@tiptap/extension-placeholder@3.20.1':
+ resolution: {integrity: sha512-k+jfbCugYGuIFBdojukgEopGazIMOgHrw46FnyN2X/6ICOIjQP2rh2ObslrsUOsJYoEevxCsNF9hZl1HvWX66g==}
peerDependencies:
- '@tiptap/extensions': ^3.18.0
+ '@tiptap/extensions': ^3.20.1
- '@tiptap/extension-strike@3.18.0':
- resolution: {integrity: sha512-kl/fa68LZg8NWUqTkRTfgyCx+IGqozBmzJxQDc1zxurrIU+VFptDV9UuZim587sbM2KGjCi/PNPjPGk1Uu0PVg==}
+ '@tiptap/extension-strike@3.20.1':
+ resolution: {integrity: sha512-EYgyma10lpsY+rwbVQL9u+gA7hBlKLSMFH7Zgd37FSxukOjr+HE8iKPQQ+SwbGejyDsPlLT8Z5Jnuxo5Ng90Pg==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-text@3.18.0':
- resolution: {integrity: sha512-9TvctdnBCwK/zyTi9kS7nGFNl5OvGM8xE0u38ZmQw5t79JOqJHgOroyqMjw8LHK/1PWrozfNCmsZbpq4IZuKXw==}
+ '@tiptap/extension-text@3.20.1':
+ resolution: {integrity: sha512-7PlIbYW8UenV6NPOXHmv8IcmPGlGx6HFq66RmkJAOJRPXPkTLAiX0N8rQtzUJ6jDEHqoJpaHFEHJw0xzW1yF+A==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extension-underline@3.18.0':
- resolution: {integrity: sha512-009IeXURNJ/sm1pBqbj+2YQgjQaBtNlJR3dbl6xu49C+qExqCmI7klhKQuwsVVGLR7ahsYlp7d9RlftnhCXIcQ==}
+ '@tiptap/extension-underline@3.20.1':
+ resolution: {integrity: sha512-fmHvDKzwCgnZUwRreq8tYkb1YyEwgzZ6QQkAQ0CsCRtvRMqzerr3Duz0Als4i8voZTuGDEL3VR6nAJbLAb/wPg==}
peerDependencies:
- '@tiptap/core': ^3.18.0
+ '@tiptap/core': ^3.20.1
- '@tiptap/extensions@3.18.0':
- resolution: {integrity: sha512-uSRIE9HGshBN6NRFR3LX2lZqBLvX92SgU5A9AvUbJD4MqU63E+HdruJnRjsVlX3kPrmbIDowxrzXlUcg3K0USQ==}
+ '@tiptap/extensions@3.20.1':
+ resolution: {integrity: sha512-JRc/v+OBH0qLTdvQ7HvHWTxGJH73QOf1MC0R8NhOX2QnAbg2mPFv1h+FjGa2gfLGuCXBdWQomjekWkUKbC4e5A==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/markdown@3.18.0':
- resolution: {integrity: sha512-F4gAr8QXc61dwOi/fwumx/mTqX0CjHiYvN/A4btPf0TpwXRcEVvlN1iz8A/8heXppbyyM6EliSMFFWN2sgVT+w==}
+ '@tiptap/markdown@3.20.1':
+ resolution: {integrity: sha512-dNrtP7kmabDomgjv9G/6+JSFL6WraPaFbmKh1eHSYKdDGvIwBfJnVPTV2VS3bP1OuYJEDJN/2ydtiCHyOTrQsQ==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/pm@3.18.0':
- resolution: {integrity: sha512-8RoI5gW0xBVCsuxahpK8vx7onAw6k2/uR3hbGBBnH+HocDMaAZKot3nTyY546ij8ospIC1mnQ7k4BhVUZesZDQ==}
+ '@tiptap/pm@3.20.1':
+ resolution: {integrity: sha512-6kCiGLvpES4AxcEuOhb7HR7/xIeJWMjZlb6J7e8zpiIh5BoQc7NoRdctsnmFEjZvC19bIasccshHQ7H2zchWqw==}
- '@tiptap/starter-kit@3.18.0':
- resolution: {integrity: sha512-LctpCelqI/5nHEeZgCPiwI1MmTjGr6YCIBGWmS5s4DJE7NfevEkwomR/C05QKdVUwPhpCXIMeS1+h/RYqRo1KA==}
+ '@tiptap/starter-kit@3.20.1':
+ resolution: {integrity: sha512-opqWxL/4OTEiqmVC0wsU4o3JhAf6LycJ2G/gRIZVAIFLljI9uHfpPMTFGxZ5w9IVVJaP5PJysfwW/635kKqkrw==}
- '@tiptap/suggestion@3.18.0':
- resolution: {integrity: sha512-AxJfM34e6wFPKVsfyXSvHN1wBBiXIm65hUmY+newop+DMeOjsvkO7M6j7tzUR2Nnrh1AQEsVr6iR0UzO91PBSA==}
+ '@tiptap/suggestion@3.20.1':
+ resolution: {integrity: sha512-ng7olbzgZhWvPJVJygNQK5153CjquR2eJXpkLq7bRjHlahvt4TH4tGFYvGdYZcXuzbe2g9RoqT7NaPGL9CUq9w==}
peerDependencies:
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
- '@tiptap/vue-3@3.18.0':
- resolution: {integrity: sha512-3JUMYqFYXEOKk2zOtPp6wuEzHAHrHdrswaRhHVVDR8olO9PpbuJ6qu83RJUB8OZVnP7dv3yxIakDf1AHMxLQXg==}
+ '@tiptap/vue-3@3.20.1':
+ resolution: {integrity: sha512-06IsNzIkAC0HPHNSdXf4AgtExnr02BHBLXmUiNrjjhgHdxXDKIB0Yq3hEWEfbWNPr3lr7jK6EaFu2IKFMhoUtQ==}
peerDependencies:
'@floating-ui/dom': ^1.0.0
- '@tiptap/core': ^3.18.0
- '@tiptap/pm': ^3.18.0
+ '@tiptap/core': ^3.20.1
+ '@tiptap/pm': ^3.20.1
vue: ^3.0.0
'@tiptap/y-tiptap@3.0.1':
@@ -2415,6 +3083,9 @@ packages:
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ '@types/esrecurse@4.3.1':
+ resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
+
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@@ -2427,8 +3098,8 @@ packages:
'@types/linkify-it@5.0.0':
resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
- '@types/lodash@4.17.23':
- resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==}
+ '@types/lodash@4.17.24':
+ resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==}
'@types/markdown-it@14.1.2':
resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
@@ -2464,70 +3135,70 @@ packages:
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
- '@typescript-eslint/eslint-plugin@8.54.0':
- resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==}
+ '@typescript-eslint/eslint-plugin@8.57.0':
+ resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.54.0
- eslint: ^8.57.0 || ^9.0.0
+ '@typescript-eslint/parser': ^8.57.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.54.0':
- resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==}
+ '@typescript-eslint/parser@8.57.0':
+ resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.54.0':
- resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==}
+ '@typescript-eslint/project-service@8.57.0':
+ resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.54.0':
- resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==}
+ '@typescript-eslint/scope-manager@8.57.0':
+ resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.54.0':
- resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==}
+ '@typescript-eslint/tsconfig-utils@8.57.0':
+ resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.54.0':
- resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==}
+ '@typescript-eslint/type-utils@8.57.0':
+ resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.54.0':
- resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==}
+ '@typescript-eslint/types@8.57.0':
+ resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.54.0':
- resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==}
+ '@typescript-eslint/typescript-estree@8.57.0':
+ resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.54.0':
- resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==}
+ '@typescript-eslint/utils@8.57.0':
+ resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.54.0':
- resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==}
+ '@typescript-eslint/visitor-keys@8.57.0':
+ resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@unhead/vue@2.1.2':
- resolution: {integrity: sha512-w5yxH/fkkLWAFAOnMSIbvAikNHYn6pgC7zGF/BasXf+K3CO1cYIPFehYAk5jpcsbiNPMc3goyyw1prGLoyD14g==}
+ '@unhead/vue@2.1.12':
+ resolution: {integrity: sha512-zEWqg0nZM8acpuTZE40wkeUl8AhIe0tU0OkilVi1D4fmVjACrwoh5HP6aNqJ8kUnKsoy6D+R3Vi/O+fmdNGO7g==}
peerDependencies:
vue: '>=3.5.18'
@@ -2634,33 +3305,47 @@ packages:
cpu: [x64]
os: [win32]
- '@vercel/nft@1.3.0':
- resolution: {integrity: sha512-i4EYGkCsIjzu4vorDUbqglZc5eFtQI2syHb++9ZUDm6TU4edVywGpVnYDein35x9sevONOn9/UabfQXuNXtuzQ==}
+ '@vercel/nft@1.3.2':
+ resolution: {integrity: sha512-HC8venRc4Ya7vNeBsJneKHHMDDWpQie7VaKhAIOst3MKO+DES+Y/SbzSp8mFkD7OzwAE2HhHkeSuSmwS20mz3A==}
engines: {node: '>=20'}
hasBin: true
- '@vitejs/plugin-vue-jsx@5.1.3':
- resolution: {integrity: sha512-I6Zr8cYVr5WHMW5gNOP09DNqW9rgO8RX73Wa6Czgq/0ndpTfJM4vfDChfOT1+3KtdrNqilNBtNlFwVeB02ZzGw==}
+ '@vitejs/plugin-vue-jsx@5.1.4':
+ resolution: {integrity: sha512-70LmoVk9riR7qc4W2CpjsbNMWTPnuZb9dpFKX1emru0yP57nsc9k8nhLA6U93ngQapv5VDIUq2JatNfLbBIkrA==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
vue: ^3.0.0
- '@vitejs/plugin-vue@6.0.3':
- resolution: {integrity: sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w==}
+ '@vitejs/plugin-vue-jsx@5.1.5':
+ resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vue: ^3.0.0
+
+ '@vitejs/plugin-vue@6.0.4':
+ resolution: {integrity: sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
vue: ^3.2.25
- '@volar/language-core@2.4.27':
- resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==}
+ '@vitejs/plugin-vue@6.0.5':
+ resolution: {integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vue: ^3.2.25
+
+ '@volar/language-core@2.4.28':
+ resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==}
- '@volar/source-map@2.4.27':
- resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==}
+ '@volar/source-map@2.4.28':
+ resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==}
- '@volar/typescript@2.4.27':
- resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==}
+ '@volar/typescript@2.4.28':
+ resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==}
'@vue-macros/common@3.1.2':
resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==}
@@ -2687,17 +3372,17 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@vue/compiler-core@3.5.27':
- resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==}
+ '@vue/compiler-core@3.5.30':
+ resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==}
- '@vue/compiler-dom@3.5.27':
- resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==}
+ '@vue/compiler-dom@3.5.30':
+ resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==}
- '@vue/compiler-sfc@3.5.27':
- resolution: {integrity: sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==}
+ '@vue/compiler-sfc@3.5.30':
+ resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==}
- '@vue/compiler-ssr@3.5.27':
- resolution: {integrity: sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==}
+ '@vue/compiler-ssr@3.5.30':
+ resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
@@ -2705,56 +3390,65 @@ packages:
'@vue/devtools-api@7.7.9':
resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
- '@vue/devtools-core@8.0.5':
- resolution: {integrity: sha512-dpCw8nl0GDBuiL9SaY0mtDxoGIEmU38w+TQiYEPOLhW03VDC0lfNMYXS/qhl4I0YlysGp04NLY4UNn6xgD0VIQ==}
+ '@vue/devtools-api@8.1.0':
+ resolution: {integrity: sha512-O44X57jjkLKbLEc4OgL/6fEPOOanRJU8kYpCE8qfKlV96RQZcdzrcLI5mxMuVRUeXhHKIHGhCpHacyCk0HyO4w==}
+
+ '@vue/devtools-core@8.0.7':
+ resolution: {integrity: sha512-PmpiPxvg3Of80ODHVvyckxwEW1Z02VIAvARIZS1xegINn3VuNQLm9iHUmKD+o6cLkMNWV8OG8x7zo0kgydZgdg==}
peerDependencies:
vue: ^3.0.0
'@vue/devtools-kit@7.7.9':
resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
- '@vue/devtools-kit@8.0.5':
- resolution: {integrity: sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==}
+ '@vue/devtools-kit@8.0.7':
+ resolution: {integrity: sha512-H6esJGHGl5q0E9iV3m2EoBQHJ+V83WMW83A0/+Fn95eZ2iIvdsq4+UCS6yT/Fdd4cGZSchx/MdWDreM3WqMsDw==}
+
+ '@vue/devtools-kit@8.1.0':
+ resolution: {integrity: sha512-/NZlS4WtGIB54DA/z10gzk+n/V7zaqSzYZOVlg2CfdnpIKdB61bd7JDIMxf/zrtX41zod8E2/bbEBoW/d7x70Q==}
'@vue/devtools-shared@7.7.9':
resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
- '@vue/devtools-shared@8.0.5':
- resolution: {integrity: sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==}
+ '@vue/devtools-shared@8.0.7':
+ resolution: {integrity: sha512-CgAb9oJH5NUmbQRdYDj/1zMiaICYSLtm+B1kxcP72LBrifGAjUmt8bx52dDH1gWRPlQgxGPqpAMKavzVirAEhA==}
+
+ '@vue/devtools-shared@8.1.0':
+ resolution: {integrity: sha512-h8uCb4Qs8UT8VdTT5yjY6tOJ//qH7EpxToixR0xqejR55t5OdISIg7AJ7eBkhBs8iu1qG5gY3QQNN1DF1EelAA==}
+
+ '@vue/language-core@3.2.5':
+ resolution: {integrity: sha512-d3OIxN/+KRedeM5wQ6H6NIpwS3P5gC9nmyaHgBk+rO6dIsjY+tOh4UlPpiZbAh3YtLdCGEX4M16RmsBqPmJV+g==}
- '@vue/language-core@3.2.4':
- resolution: {integrity: sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew==}
+ '@vue/language-core@3.2.6':
+ resolution: {integrity: sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==}
- '@vue/reactivity@3.5.27':
- resolution: {integrity: sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==}
+ '@vue/reactivity@3.5.30':
+ resolution: {integrity: sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==}
- '@vue/runtime-core@3.5.27':
- resolution: {integrity: sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==}
+ '@vue/runtime-core@3.5.30':
+ resolution: {integrity: sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==}
- '@vue/runtime-dom@3.5.27':
- resolution: {integrity: sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==}
+ '@vue/runtime-dom@3.5.30':
+ resolution: {integrity: sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==}
- '@vue/server-renderer@3.5.27':
- resolution: {integrity: sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==}
+ '@vue/server-renderer@3.5.30':
+ resolution: {integrity: sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==}
peerDependencies:
- vue: 3.5.27
+ vue: 3.5.30
- '@vue/shared@3.5.27':
- resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==}
+ '@vue/shared@3.5.30':
+ resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==}
'@vueuse/core@10.11.1':
resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
- '@vueuse/core@12.8.2':
- resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
-
- '@vueuse/core@14.2.0':
- resolution: {integrity: sha512-tpjzVl7KCQNVd/qcaCE9XbejL38V6KJAEq/tVXj7mDPtl6JtzmUdnXelSS+ULRkkrDgzYVK7EerQJvd2jR794Q==}
+ '@vueuse/core@14.2.1':
+ resolution: {integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==}
peerDependencies:
vue: ^3.5.0
- '@vueuse/integrations@14.2.0':
- resolution: {integrity: sha512-Yuo5XbIi6XkfSXOYKd5SBZwyBEyO3Hd41eeG2555hDbE0Maz/P0BfPJDYhgDXjS9xI0jkWUUp1Zh5lXHOgkwLw==}
+ '@vueuse/integrations@14.2.1':
+ resolution: {integrity: sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA==}
peerDependencies:
async-validator: ^4
axios: ^1
@@ -2798,14 +3492,11 @@ packages:
'@vueuse/metadata@10.11.1':
resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
- '@vueuse/metadata@12.8.2':
- resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
-
- '@vueuse/metadata@14.2.0':
- resolution: {integrity: sha512-i3axTGjU8b13FtyR4Keeama+43iD+BwX9C2TmzBVKqjSHArF03hjkp2SBZ1m72Jk2UtrX0aYCugBq2R1fhkuAQ==}
+ '@vueuse/metadata@14.2.1':
+ resolution: {integrity: sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==}
- '@vueuse/nuxt@14.2.0':
- resolution: {integrity: sha512-MpxTYd7/W0izL6DgMEYUUTYkm1q0aqE0kfMr6oBcj5R0TIrdPJAJIwVaqs5pbSjQUPjNNgQ7mCRvx9RKFUq+VQ==}
+ '@vueuse/nuxt@14.2.1':
+ resolution: {integrity: sha512-DHgFMUpyH98M1YM9pbnRjFXMAMKEsHntJeOp8rOXs8QN2cvJBzEZ+TTWIBSPESNFOEwM02RA6BDsaTL35OK4Mw==}
peerDependencies:
nuxt: ^3.0.0 || ^4.0.0-0
vue: ^3.5.0
@@ -2813,11 +3504,8 @@ packages:
'@vueuse/shared@10.11.1':
resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
- '@vueuse/shared@12.8.2':
- resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
-
- '@vueuse/shared@14.2.0':
- resolution: {integrity: sha512-Z0bmluZTlAXgUcJ4uAFaML16JcD8V0QG00Db3quR642I99JXIDRa2MI2LGxiLVhcBjVnL1jOzIvT5TT2lqJlkA==}
+ '@vueuse/shared@14.2.1':
+ resolution: {integrity: sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==}
peerDependencies:
vue: ^3.5.0
@@ -2842,8 +3530,8 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -2851,11 +3539,11 @@ packages:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ ajv@6.14.0:
+ resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
- ajv@8.17.1:
- resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ ajv@8.18.0:
+ resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==}
alien-signals@3.1.2:
resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==}
@@ -2923,8 +3611,8 @@ packages:
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
- autoprefixer@10.4.24:
- resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==}
+ autoprefixer@10.4.27:
+ resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
@@ -2934,8 +3622,8 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
- b4a@1.7.3:
- resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==}
+ b4a@1.8.0:
+ resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
peerDependencies:
react-native-b4a: '*'
peerDependenciesMeta:
@@ -2948,6 +3636,10 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
bare-events@2.8.2:
resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
peerDependencies:
@@ -2956,42 +3648,78 @@ packages:
bare-abort-controller:
optional: true
+ bare-fs@4.5.5:
+ resolution: {integrity: sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+
+ bare-os@3.7.1:
+ resolution: {integrity: sha512-ebvMaS5BgZKmJlvuWh14dg9rbUI84QeV3WlWn6Ph6lFI8jJoh7ADtVTyD2c93euwbe+zgi0DVrl4YmqXeM9aIA==}
+ engines: {bare: '>=1.14.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-stream@2.8.1:
+ resolution: {integrity: sha512-bSeR8RfvbRwDpD7HWZvn8M3uYNDrk7m9DQjYOFkENZlXW8Ju/MPaqUPQq5LqJ3kyjEm07siTaAQ7wBKCU59oHg==}
+ peerDependencies:
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
+ bare-url@2.3.2:
+ resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==}
+
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.9.19:
- resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==}
+ baseline-browser-mapping@2.10.0:
+ resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==}
+ engines: {node: '>=6.0.0'}
hasBin: true
better-sqlite3@12.6.2:
resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==}
engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x}
+ better-sqlite3@12.8.0:
+ resolution: {integrity: sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ==}
+ engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x}
+
bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
birpc@2.9.0:
resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
+ birpc@4.0.0:
+ resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
+
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
- brace-expansion@1.1.12:
- resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
-
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@5.0.4:
+ resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==}
+ engines: {node: 18 || 20 || >=22}
+
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- brotli@1.3.3:
- resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==}
-
browserslist@4.28.1:
resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -3036,6 +3764,10 @@ packages:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
+ cac@7.0.0:
+ resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ engines: {node: '>=20.19.0'}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -3055,16 +3787,12 @@ packages:
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
- caniuse-lite@1.0.30001766:
- resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==}
+ caniuse-lite@1.0.30001777:
+ resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
change-case@5.4.4:
resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
@@ -3106,8 +3834,8 @@ packages:
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
- citty@0.2.0:
- resolution: {integrity: sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==}
+ citty@0.2.1:
+ resolution: {integrity: sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==}
clean-git-ref@2.0.1:
resolution: {integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==}
@@ -3124,10 +3852,6 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
- clone@2.1.2:
- resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
- engines: {node: '>=0.8'}
-
cluster-key-slot@1.1.2:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'}
@@ -3172,29 +3896,26 @@ packages:
resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
engines: {node: '>= 14'}
- concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
- confbox@0.2.2:
- resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+ confbox@0.2.4:
+ resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==}
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
- conventional-changelog-angular@8.1.0:
- resolution: {integrity: sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==}
+ conventional-changelog-angular@8.3.0:
+ resolution: {integrity: sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==}
engines: {node: '>=18'}
- conventional-changelog-conventionalcommits@9.1.0:
- resolution: {integrity: sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==}
+ conventional-changelog-conventionalcommits@9.3.0:
+ resolution: {integrity: sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA==}
engines: {node: '>=18'}
- conventional-commits-parser@6.2.1:
- resolution: {integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==}
+ conventional-commits-parser@6.3.0:
+ resolution: {integrity: sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==}
engines: {node: '>=18'}
hasBin: true
@@ -3211,9 +3932,6 @@ packages:
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
engines: {node: '>=18'}
- copy-paste@2.2.0:
- resolution: {integrity: sha512-jqSL4r9DSeiIvJZStLzY/sMLt9ToTM7RsK237lYOTG+KcbQJHGala3R1TUpa8h1p9adswVgIdV4qGbseVhL4lg==}
-
core-js-compat@3.48.0:
resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
@@ -3228,8 +3946,8 @@ packages:
cosmiconfig: '>=9'
typescript: '>=5'
- cosmiconfig@9.0.0:
- resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ cosmiconfig@9.0.1:
+ resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==}
engines: {node: '>=14'}
peerDependencies:
typescript: '>=4.9.5'
@@ -3273,8 +3991,8 @@ packages:
resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- css-tree@3.1.0:
- resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+ css-tree@3.2.1:
+ resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
css-what@6.2.2:
@@ -3286,8 +4004,8 @@ packages:
engines: {node: '>=4'}
hasBin: true
- cssnano-preset-default@7.0.10:
- resolution: {integrity: sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==}
+ cssnano-preset-default@7.0.11:
+ resolution: {integrity: sha512-waWlAMuCakP7//UCY+JPrQS1z0OSLeOXk2sKWJximKWGupVxre50bzPlvpbUwZIDylhf/ptf0Pk+Yf7C+hoa3g==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -3298,8 +4016,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- cssnano@7.1.2:
- resolution: {integrity: sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==}
+ cssnano@7.1.3:
+ resolution: {integrity: sha512-mLFHQAzyapMVFLiJIn7Ef4C2UCEvtlTlbyILR6B5ZsUAV3D/Pa761R5uC1YPhyBkRd3eqaDm2ncaNrD7R4mTRg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -3311,10 +4029,6 @@ packages:
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- dargs@8.1.0:
- resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
- engines: {node: '>=12'}
-
db0@0.3.4:
resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==}
peerDependencies:
@@ -3369,8 +4083,8 @@ packages:
resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
engines: {node: '>=18'}
- default-browser@5.4.0:
- resolution: {integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==}
+ default-browser@5.5.0:
+ resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
engines: {node: '>=18'}
define-data-property@1.1.4:
@@ -3410,15 +4124,15 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
- devalue@5.6.2:
- resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==}
+ devalue@5.6.3:
+ resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==}
+
+ devalue@5.6.4:
+ resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- dfa@1.2.0:
- resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==}
-
diff3@0.0.3:
resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==}
@@ -3447,12 +4161,8 @@ packages:
resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
engines: {node: '>=8'}
- dotenv@16.6.1:
- resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
- engines: {node: '>=12'}
-
- dotenv@17.2.3:
- resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
+ dotenv@17.3.1:
+ resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==}
engines: {node: '>=12'}
dunder-proto@1.0.1:
@@ -3468,8 +4178,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.283:
- resolution: {integrity: sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==}
+ electron-to-chromium@1.5.307:
+ resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==}
embla-carousel-auto-height@8.6.0:
resolution: {integrity: sha512-/HrJQOEM6aol/oF33gd2QlINcXy3e19fJWvHDuHWp2bpyTa+2dm9tVVJak30m2Qy6QyQ6Fc8DkImtv7pxWOJUQ==}
@@ -3541,8 +4251,8 @@ packages:
resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
engines: {node: '>=10.0.0'}
- enhanced-resolve@5.18.4:
- resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==}
+ enhanced-resolve@5.20.0:
+ resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==}
engines: {node: '>=10.13.0'}
entities@4.5.0:
@@ -3590,8 +4300,13 @@ packages:
engines: {node: '>=18'}
hasBin: true
- esbuild@0.27.2:
- resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
+ esbuild@0.27.3:
+ resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.27.4:
+ resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==}
engines: {node: '>=18'}
hasBin: true
@@ -3619,13 +4334,13 @@ packages:
engines: {node: '>=6.0'}
hasBin: true
- eslint-config-flat-gitignore@2.1.0:
- resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==}
+ eslint-config-flat-gitignore@2.2.1:
+ resolution: {integrity: sha512-wA5EqN0era7/7Gt5Botlsfin/UNY0etJSEeBgbUlFLFrBi47rAN//+39fI7fpYcl8RENutlFtvp/zRa/M/pZNg==}
peerDependencies:
- eslint: ^9.5.0
+ eslint: ^9.5.0 || ^10.0.0
- eslint-flat-config-utils@3.0.0:
- resolution: {integrity: sha512-bzTam/pSnPANR0GUz4g7lo4fyzlQZwuz/h8ytsSS4w59N/JlXH/l7jmyNVBLxPz3B9/9ntz5ZLevGpazyDXJQQ==}
+ eslint-flat-config-utils@3.0.2:
+ resolution: {integrity: sha512-mPvevWSDQFwgABvyCurwIu6ZdKxGI5NW22/BGDwA1T49NO6bXuxbV9VfJK/tkQoNyPogT6Yu1d57iM0jnZVWmg==}
eslint-import-context@0.1.9:
resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==}
@@ -3641,18 +4356,18 @@ packages:
peerDependencies:
eslint: '*'
- eslint-plugin-import-lite@0.5.0:
- resolution: {integrity: sha512-7uBvxuQj+VlYmZSYSHcm33QgmZnvMLP2nQiWaLtjhJ5x1zKcskOqjolL+dJC13XY+ktQqBgidAnnQMELfRaXQg==}
+ eslint-plugin-import-lite@0.5.2:
+ resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=9.0.0'
- eslint-plugin-import-x@4.16.1:
- resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==}
+ eslint-plugin-import-x@4.16.2:
+ resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/utils': ^8.0.0
- eslint: ^8.57.0 || ^9.0.0
+ '@typescript-eslint/utils': ^8.56.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
eslint-import-resolver-node: '*'
peerDependenciesMeta:
'@typescript-eslint/utils':
@@ -3660,31 +4375,31 @@ packages:
eslint-import-resolver-node:
optional: true
- eslint-plugin-jsdoc@62.5.0:
- resolution: {integrity: sha512-D+1haMVDzW/ZMoPwOnsbXCK07rJtsq98Z1v+ApvDKxSzYTTcPgmFc/nyUDCGmxm2cP7g7hszyjYHO7Zodl/43w==}
+ eslint-plugin-jsdoc@62.8.0:
+ resolution: {integrity: sha512-hu3r9/6JBmPG6wTcqtYzgZAnjEG2eqRUATfkFscokESg1VDxZM21ZaMire0KjeMwfj+SXvgB4Rvh5LBuesj92w==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
- eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
- eslint-plugin-regexp@3.0.0:
- resolution: {integrity: sha512-iW7hgAV8NOG6E2dz+VeKpq67YLQ9jaajOKYpoOSic2/q8y9BMdXBKkSR9gcMtbqEhNQzdW41E3wWzvhp8ExYwQ==}
+ eslint-plugin-regexp@3.1.0:
+ resolution: {integrity: sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: '>=9.38.0'
- eslint-plugin-unicorn@62.0.0:
- resolution: {integrity: sha512-HIlIkGLkvf29YEiS/ImuDZQbP12gWyx5i3C6XrRxMvVdqMroCI9qoVYCoIl17ChN+U89pn9sVwLxhIWj5nEc7g==}
+ eslint-plugin-unicorn@63.0.0:
+ resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==}
engines: {node: ^20.10.0 || >=21.0.0}
peerDependencies:
eslint: '>=9.38.0'
- eslint-plugin-vue@10.7.0:
- resolution: {integrity: sha512-r2XFCK4qlo1sxEoAMIoTTX0PZAdla0JJDt1fmYiworZUX67WeEGqm+JbyAg3M+pGiJ5U6Mp5WQbontXWtIW7TA==}
+ eslint-plugin-vue@10.8.0:
+ resolution: {integrity: sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
'@typescript-eslint/parser': ^7.0.0 || ^8.0.0
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
vue-eslint-parser: ^10.0.0
peerDependenciesMeta:
'@stylistic/eslint-plugin':
@@ -3698,14 +4413,14 @@ packages:
'@vue/compiler-sfc': ^3.3.0
eslint: '>=9.0.0'
- eslint-scope@8.4.0:
- resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ eslint-scope@9.1.2:
+ resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint-typegen@2.3.0:
- resolution: {integrity: sha512-azYgAvhlz1AyTpeLfVSKcrNJInuIsRrcUrOcHmEl8T9oMKesePVUPrF8gRgE6azV8CAlFzxJDTyaXAAbA/BYiA==}
+ eslint-typegen@2.3.1:
+ resolution: {integrity: sha512-zVdh8rThBvv2o5T/K524Fr5iy1Jo0q09rHL7y7FbOhgMB177T2gw+shxfC4ChCEqdq6/y6LJA4j8Fbr/Xls9aw==}
peerDependencies:
- eslint: ^9.0.0
+ eslint: ^9.0.0 || ^10.0.0
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
@@ -3715,13 +4430,13 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint-visitor-keys@5.0.0:
- resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==}
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- eslint@9.39.2:
- resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ eslint@10.1.0:
+ resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true
peerDependencies:
jiti: '*'
@@ -3733,8 +4448,8 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- espree@11.1.0:
- resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==}
+ espree@11.2.0:
+ resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
espree@9.6.1:
@@ -3817,8 +4532,9 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fast-npm-meta@0.4.8:
- resolution: {integrity: sha512-ybZVlDZ2PkO79dosM+6CLZfKWRH8MF0PiWlw8M4mVWJl8IEJrPfxYc7Tsu830Dwj/R96LKXfePGTSzKWbPJ08w==}
+ fast-npm-meta@1.4.2:
+ resolution: {integrity: sha512-XXyd9d3ie/JeIIjm6WeKalvapGGFI4ShAjPJM78vgUFYzoEsuNSjvvVTuht0XZcwbVdOnEEGzhxwguRbxkIcDg==}
+ hasBin: true
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
@@ -3867,18 +4583,19 @@ packages:
engines: {node: '>=18'}
hasBin: true
- flatted@3.3.3:
- resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+ flatted@3.4.1:
+ resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==}
- fontaine@0.7.0:
- resolution: {integrity: sha512-vlaWLyoJrOnCBqycmFo/CA8ZmPzuyJHYmgu261KYKByZ4YLz9sTyHZ4qoHgWSYiDsZXhiLo2XndVMz0WOAyZ8Q==}
+ fontaine@0.8.0:
+ resolution: {integrity: sha512-eek1GbzOdWIj9FyQH/emqW1aEdfC3lYRCHepzwlFCm5T77fBSRSyNRKE6/antF1/B1M+SfJXVRQTY9GAr7lnDg==}
engines: {node: '>=18.12.0'}
- fontkit@2.0.4:
- resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==}
+ fontkitten@1.0.3:
+ resolution: {integrity: sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==}
+ engines: {node: '>=20'}
- fontless@0.1.0:
- resolution: {integrity: sha512-KyvRd732HuVd/XP9iEFTb1w8Q01TPSA5GaCJV9HYmPiEs/ZZg/on2YdrQmlKfi9gDGpmN5Bn27Ze/CHqk0vE+w==}
+ fontless@0.2.1:
+ resolution: {integrity: sha512-mUWZ8w91/mw2KEcZ6gHNoNNmsAq9Wiw2IypIux5lM03nhXm+WSloXGUNuRETNTLqZexMgpt7Aj/v63qqrsWraQ==}
engines: {node: '>=18.12.0'}
peerDependencies:
vite: '*'
@@ -3897,8 +4614,8 @@ packages:
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
- framer-motion@12.29.2:
- resolution: {integrity: sha512-lSNRzBJk4wuIy0emYQ/nfZ7eWhqud2umPKw2QAQki6uKhZPKm2hRQHeQoHTG9MIvfobb+A/LbEWPJU794ZUKrg==}
+ framer-motion@12.35.2:
+ resolution: {integrity: sha512-dhfuEMaNo0hc+AEqyHiIfiJRNb9U9UQutE9FoKm5pjf7CMitp9xPEF1iWZihR1q86LBmo6EJ7S8cN8QXEy49AA==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -3930,6 +4647,9 @@ packages:
resolution: {integrity: sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==}
engines: {node: '>=10'}
+ fzf@0.5.2:
+ resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -3953,16 +4673,20 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
- get-tsconfig@4.13.1:
- resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==}
+ get-tsconfig@4.13.6:
+ resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
giget@2.0.0:
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
hasBin: true
- git-raw-commits@4.0.0:
- resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
- engines: {node: '>=16'}
+ giget@3.1.2:
+ resolution: {integrity: sha512-T2qUpKBHeUTwHcIhydgnJzhL0Hj785ms+JkxaaWQH9SDM/llXeewnOkfJcFShAHjWI+26hOChwUfCoupaXLm8g==}
+ hasBin: true
+
+ git-raw-commits@5.0.1:
+ resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==}
+ engines: {node: '>=18'}
hasBin: true
git-up@8.1.1:
@@ -3987,30 +4711,27 @@ packages:
glob@10.5.0:
resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin: true
- glob@13.0.0:
- resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
- engines: {node: 20 || >=22}
+ glob@13.0.6:
+ resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
+ engines: {node: 18 || 20 || >=22}
global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
engines: {node: '>=18'}
- globals@14.0.0:
- resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
- engines: {node: '>=18'}
-
globals@16.5.0:
resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
engines: {node: '>=18'}
- globals@17.3.0:
- resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==}
+ globals@17.4.0:
+ resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==}
engines: {node: '>=18'}
- globby@16.1.0:
- resolution: {integrity: sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==}
+ globby@16.1.1:
+ resolution: {integrity: sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==}
engines: {node: '>=20'}
gopd@1.2.0:
@@ -4024,8 +4745,8 @@ packages:
resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- h3@1.15.5:
- resolution: {integrity: sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==}
+ h3@1.15.6:
+ resolution: {integrity: sha512-oi15ESLW5LRthZ+qPCi5GNasY/gvynSKUQxgiovrY63bPAtG59wtM+LSrlcwvOHAXzGrXVLnI97brbkdPF9WoQ==}
h3@2.0.1-rc.11:
resolution: {integrity: sha512-2myzjCqy32c1As9TjZW9fNZXtLqNedjFSrdFy2AjFBQQ3LzrnGoDdFDYfC0tV2e4vcyfJ2Sfo/F6NQhO2Ly/Mw==}
@@ -4036,10 +4757,6 @@ packages:
crossws:
optional: true
- has-flag@4.0.0:
- resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
- engines: {node: '>=8'}
-
has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
@@ -4151,10 +4868,6 @@ packages:
engines: {node: '>=18'}
hasBin: true
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
-
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -4176,8 +4889,8 @@ packages:
import-meta-resolve@4.2.0:
resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==}
- impound@1.0.0:
- resolution: {integrity: sha512-8lAJ+1Arw2sMaZ9HE2ZmL5zOcMnt18s6+7Xqgq2aUVy4P1nlzAyPtzCDxsk51KVFwHEEdc6OWvUyqwHwhRYaug==}
+ impound@1.1.5:
+ resolution: {integrity: sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
@@ -4197,8 +4910,8 @@ packages:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- ioredis@5.9.2:
- resolution: {integrity: sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==}
+ ioredis@5.10.0:
+ resolution: {integrity: sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==}
engines: {node: '>=12.22.0'}
iron-webcrypto@1.2.1:
@@ -4311,8 +5024,8 @@ packages:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
- is-wsl@3.1.0:
- resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ is-wsl@3.1.1:
+ resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
engines: {node: '>=16'}
is64bit@2.0.0:
@@ -4328,12 +5041,12 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- isexe@3.1.1:
- resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
- engines: {node: '>=16'}
+ isexe@3.1.5:
+ resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==}
+ engines: {node: '>=18'}
- isomorphic-git@1.36.3:
- resolution: {integrity: sha512-bHF1nQTjL0IfSo13BHDO8oQ6SvYNQduTAdPJdSmrJ5JwZY2fsyjLujEXav5hqPCegSCAnc75ZsBUHqT/NqR7QA==}
+ isomorphic-git@1.37.2:
+ resolution: {integrity: sha512-HCQBBKmXIMPdHgYGstSBNp6MNmVcMQBbUqJF8xfywFmlpNseO4KKex59YlXqNxhRxmv3fUZwvNWvMyOdc1VvhA==}
engines: {node: '>=14.17'}
hasBin: true
@@ -4357,8 +5070,8 @@ packages:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
- jsdoc-type-pratt-parser@7.1.0:
- resolution: {integrity: sha512-SX7q7XyCwzM/MEDCYz0l8GgGbJAACGFII9+WfNYr5SLEKukHWRy2Jk3iWRe7P+lpYJNs7oQ+OSei4JtKGUjd7A==}
+ jsdoc-type-pratt-parser@7.1.1:
+ resolution: {integrity: sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==}
engines: {node: '>=20.0.0'}
jsesc@3.1.0:
@@ -4398,16 +5111,9 @@ packages:
resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- kasi@2.0.1:
- resolution: {integrity: sha512-8qhiHZ1BN26ig1+jQ9fWEk6dj8T1wuxs00QRJfXIANI4scto1EuPUgqj+mxHls52WBfdTNJGQ8yYw9rDpWUcgQ==}
-
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- kleur@3.0.3:
- resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
- engines: {node: '>=6'}
-
kleur@4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
@@ -4419,8 +5125,8 @@ packages:
knitwork@1.3.0:
resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
- launch-editor@2.12.0:
- resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==}
+ launch-editor@2.13.1:
+ resolution: {integrity: sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==}
lazystream@1.0.1:
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
@@ -4435,23 +5141,17 @@ packages:
engines: {node: '>=16'}
hasBin: true
- lightningcss-android-arm64@1.30.2:
- resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [android]
-
lightningcss-android-arm64@1.31.1:
resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [android]
- lightningcss-darwin-arm64@1.30.2:
- resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
- os: [darwin]
+ os: [android]
lightningcss-darwin-arm64@1.31.1:
resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
@@ -4459,10 +5159,10 @@ packages:
cpu: [arm64]
os: [darwin]
- lightningcss-darwin-x64@1.30.2:
- resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
engines: {node: '>= 12.0.0'}
- cpu: [x64]
+ cpu: [arm64]
os: [darwin]
lightningcss-darwin-x64@1.31.1:
@@ -4471,11 +5171,11 @@ packages:
cpu: [x64]
os: [darwin]
- lightningcss-freebsd-x64@1.30.2:
- resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
- os: [freebsd]
+ os: [darwin]
lightningcss-freebsd-x64@1.31.1:
resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
@@ -4483,11 +5183,11 @@ packages:
cpu: [x64]
os: [freebsd]
- lightningcss-linux-arm-gnueabihf@1.30.2:
- resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
engines: {node: '>= 12.0.0'}
- cpu: [arm]
- os: [linux]
+ cpu: [x64]
+ os: [freebsd]
lightningcss-linux-arm-gnueabihf@1.31.1:
resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
@@ -4495,12 +5195,11 @@ packages:
cpu: [arm]
os: [linux]
- lightningcss-linux-arm64-gnu@1.30.2:
- resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
engines: {node: '>= 12.0.0'}
- cpu: [arm64]
+ cpu: [arm]
os: [linux]
- libc: [glibc]
lightningcss-linux-arm64-gnu@1.31.1:
resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
@@ -4509,12 +5208,12 @@ packages:
os: [linux]
libc: [glibc]
- lightningcss-linux-arm64-musl@1.30.2:
- resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
- libc: [musl]
+ libc: [glibc]
lightningcss-linux-arm64-musl@1.31.1:
resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
@@ -4523,12 +5222,12 @@ packages:
os: [linux]
libc: [musl]
- lightningcss-linux-x64-gnu@1.30.2:
- resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines: {node: '>= 12.0.0'}
- cpu: [x64]
+ cpu: [arm64]
os: [linux]
- libc: [glibc]
+ libc: [musl]
lightningcss-linux-x64-gnu@1.31.1:
resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
@@ -4537,12 +5236,12 @@ packages:
os: [linux]
libc: [glibc]
- lightningcss-linux-x64-musl@1.30.2:
- resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
- libc: [musl]
+ libc: [glibc]
lightningcss-linux-x64-musl@1.31.1:
resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
@@ -4551,11 +5250,12 @@ packages:
os: [linux]
libc: [musl]
- lightningcss-win32-arm64-msvc@1.30.2:
- resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [win32]
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
lightningcss-win32-arm64-msvc@1.31.1:
resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
@@ -4563,10 +5263,10 @@ packages:
cpu: [arm64]
os: [win32]
- lightningcss-win32-x64-msvc@1.30.2:
- resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
engines: {node: '>= 12.0.0'}
- cpu: [x64]
+ cpu: [arm64]
os: [win32]
lightningcss-win32-x64-msvc@1.31.1:
@@ -4575,14 +5275,20 @@ packages:
cpu: [x64]
os: [win32]
- lightningcss@1.30.2:
- resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
lightningcss@1.31.1:
resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
engines: {node: '>= 12.0.0'}
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
@@ -4616,24 +5322,36 @@ packages:
resolution: {integrity: sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==}
engines: {node: '>=20'}
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
lodash.defaults@4.2.0:
resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
lodash.isarguments@3.1.0:
resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
+ lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+
lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
- lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
lodash.mergewith@4.6.2:
resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
+ lodash.snakecase@4.1.1:
+ resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+
lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+ lodash.upperfirst@4.3.1:
+ resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
+
lodash@4.17.23:
resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
@@ -4643,8 +5361,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.2.5:
- resolution: {integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==}
+ lru-cache@11.2.6:
+ resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
@@ -4660,18 +5378,18 @@ packages:
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
- magicast@0.5.1:
- resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==}
+ magicast@0.5.2:
+ resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==}
- markdown-it@14.1.0:
- resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
+ markdown-it@14.1.1:
+ resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==}
hasBin: true
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
- marked@17.0.1:
- resolution: {integrity: sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==}
+ marked@17.0.4:
+ resolution: {integrity: sha512-NOmVMM+KAokHMvjWmC5N/ZOvgmSWuqJB8FoYI019j4ogb/PeRMKoKIjReZ2w3376kkA8dSJIP8uD993Kxc0iRQ==}
engines: {node: '>= 20'}
hasBin: true
@@ -4682,8 +5400,8 @@ packages:
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
- mdast-util-from-markdown@2.0.2:
- resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
+ mdast-util-from-markdown@2.0.3:
+ resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==}
mdast-util-gfm-autolink-literal@2.0.1:
resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
@@ -4718,16 +5436,12 @@ packages:
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
- mdn-data@2.12.2:
- resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+ mdn-data@2.27.1:
+ resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
mdurl@2.0.0:
resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
- meow@12.1.1:
- resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
- engines: {node: '>=16.10'}
-
meow@13.2.0:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
@@ -4851,19 +5565,16 @@ packages:
minimark@0.2.0:
resolution: {integrity: sha512-AmtWU9pO0C2/3AM2pikaVhJ//8E5rOpJ7+ioFQfjIq+wCsBeuZoxPd97hBFZ9qrI7DMHZudwGH3r8A7BMnsIew==}
- minimatch@10.1.1:
- resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
- engines: {node: 20 || >=22}
-
- minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ minimatch@10.2.4:
+ resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
+ engines: {node: 18 || 20 || >=22}
- minimatch@5.1.6:
- resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ minimatch@5.1.9:
+ resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
engines: {node: '>=10'}
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ minimatch@9.0.9:
+ resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
engines: {node: '>=16 || 14 >=14.17'}
minimist@1.2.8:
@@ -4872,8 +5583,8 @@ packages:
minimisted@2.0.1:
resolution: {integrity: sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==}
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'}
minizlib@3.1.0:
@@ -4886,20 +5597,20 @@ packages:
mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
- mlly@1.8.0:
- resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+ mlly@1.8.1:
+ resolution: {integrity: sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==}
mocked-exports@0.1.1:
resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==}
- motion-dom@12.29.2:
- resolution: {integrity: sha512-/k+NuycVV8pykxyiTCoFzIVLA95Nb1BFIVvfSu9L50/6K6qNeAYtkxXILy/LRutt7AzaYDc2myj0wkCVVYAPPA==}
+ motion-dom@12.35.2:
+ resolution: {integrity: sha512-pWXFMTwvGDbx1Fe9YL5HZebv2NhvGBzRtiNUv58aoK7+XrsuaydQ0JGRKK2r+bTKlwgSWwWxHbP5249Qr/BNpg==}
motion-utils@12.29.2:
resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==}
- motion-v@1.10.2:
- resolution: {integrity: sha512-K+Zus21KKgZP4CBY7CvU/B7UZCV9sZTHG0FgsAfGHlbZi+u8EolmZ2kvJe5zOG0RzCgdiVCobHBt54qch9rweg==}
+ motion-v@1.10.3:
+ resolution: {integrity: sha512-9Ewo/wwGv7FO3PqYJpllBF/Efc7tbeM1iinVrM73s0RUQrnXHwMZCaRX98u4lu0PQCrZghPPfCsQ14pWKIEbnQ==}
peerDependencies:
'@vueuse/core': '>=10.0.0'
vue: '>=3.0.0'
@@ -4919,13 +5630,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@5.1.6:
- resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==}
- engines: {node: ^18 || >=20}
- hasBin: true
+ nanotar@0.2.1:
+ resolution: {integrity: sha512-MUrzzDUcIOPbv7ubhDV/L4CIfVTATd9XhDE2ixFeCrM5yp9AlzUpn91JrnN0HD6hksdxvz9IW9aKANz0Bta0GA==}
- nanotar@0.2.0:
- resolution: {integrity: sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==}
+ nanotar@0.3.0:
+ resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==}
napi-build-utils@2.0.0:
resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
@@ -4948,8 +5657,8 @@ packages:
xml2js:
optional: true
- node-abi@3.87.0:
- resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==}
+ node-abi@3.88.0:
+ resolution: {integrity: sha512-At6b4UqIEVudaqPsXjmUO1r/N5BUr4yhDGs5PkBE8/oG5+TfLPhFechiskFsnT6Ql0VfUXbalUUCbfXxtj7K+w==}
engines: {node: '>=10'}
node-addon-api@7.1.1:
@@ -4982,8 +5691,8 @@ packages:
node-mock-http@1.0.4:
resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
- node-releases@2.0.27:
- resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+ node-releases@2.0.36:
+ resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==}
nopt@8.1.0:
resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
@@ -5005,15 +5714,28 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- nuxt-component-meta@0.17.1:
- resolution: {integrity: sha512-5pVCzWXqg9HP159JDhdfQJtFvgmS/KouEVpyYLPEBXWMrQoJBwujsczmLeIKXKI2BTy4RqfXy8N1GfGTZNb57g==}
+ nuxt-component-meta@0.17.2:
+ resolution: {integrity: sha512-2/mSSqutOX8t+r8cAX1yUYwAPBqicPO5Rfum3XaHVszxKCF4tXEXBiPGfJY9Zn69x/CIeOdw+aM9wmHzQ5Q+lA==}
hasBin: true
nuxt-define@1.0.0:
resolution: {integrity: sha512-CYZ2WjU+KCyCDVzjYUM4eEpMF0rkPmkpiFrybTqqQCRpUbPt2h3snswWIpFPXTi+osRCY6Og0W/XLAQgDL4FfQ==}
- nuxt@4.3.0:
- resolution: {integrity: sha512-99Iw3E3L5/2QtJyV4errZ0axkX/S9IAFK0AHm0pmRHkCu37OFn8mz2P4/CYTt6B/TG3mcKbXAVaeuF2FsAc1cA==}
+ nuxt@4.3.1:
+ resolution: {integrity: sha512-bl+0rFcT5Ax16aiWFBFPyWcsTob19NTZaDL5P6t0MQdK63AtgS6fN6fwvwdbXtnTk6/YdCzlmuLzXhSM22h0OA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@parcel/watcher': ^2.1.0
+ '@types/node': '>=18.12.0'
+ peerDependenciesMeta:
+ '@parcel/watcher':
+ optional: true
+ '@types/node':
+ optional: true
+
+ nuxt@4.4.2:
+ resolution: {integrity: sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -5025,8 +5747,8 @@ packages:
'@types/node':
optional: true
- nypm@0.6.4:
- resolution: {integrity: sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw==}
+ nypm@0.6.5:
+ resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==}
engines: {node: '>=18'}
hasBin: true
@@ -5039,6 +5761,9 @@ packages:
ofetch@1.5.1:
resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
+ ofetch@2.0.0-alpha.3:
+ resolution: {integrity: sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA==}
+
ohash@2.0.11:
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
@@ -5078,20 +5803,32 @@ packages:
orderedmap@2.1.1:
resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
- oxc-minify@0.110.0:
- resolution: {integrity: sha512-KWGTzPo83QmGrXC4ml83PM9HDwUPtZFfasiclUvTV4i3/0j7xRRqINVkrL77CbQnoWura3CMxkRofjQKVDuhBw==}
+ oxc-minify@0.112.0:
+ resolution: {integrity: sha512-rkVSeeIRSt+RYI9uX6xonBpLUpvZyegxIg0UL87ev7YAfUqp7IIZlRjkgQN5Us1lyXD//TOo0Dcuuro/TYOWoQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-minify@0.117.0:
+ resolution: {integrity: sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-parser@0.112.0:
+ resolution: {integrity: sha512-7rQ3QdJwobMQLMZwQaPuPYMEF2fDRZwf51lZ//V+bA37nejjKW5ifMHbbCwvA889Y4RLhT+/wLJpPRhAoBaZYw==}
engines: {node: ^20.19.0 || >=22.12.0}
- oxc-parser@0.110.0:
- resolution: {integrity: sha512-GijUR3K1Ln/QwMyYXRsBtOyzqGaCs9ce5pOug1UtrMg8dSiE7VuuRuIcyYD4nyJbasat3K0YljiKt/PSFPdSBA==}
+ oxc-parser@0.117.0:
+ resolution: {integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==}
engines: {node: ^20.19.0 || >=22.12.0}
oxc-parser@0.95.0:
resolution: {integrity: sha512-Te8fE/SmiiKWIrwBwxz5Dod87uYvsbcZ9JAL5ylPg1DevyKgTkxCXnPEaewk1Su2qpfNmry5RHoN+NywWFCG+A==}
engines: {node: ^20.19.0 || >=22.12.0}
- oxc-transform@0.110.0:
- resolution: {integrity: sha512-/fymQNzzUoKZweH0nC5yvbI2eR0yWYusT9TEKDYVgOgYrf9Qmdez9lUFyvxKR9ycx+PTHi/reIOzqf3wkShQsw==}
+ oxc-transform@0.112.0:
+ resolution: {integrity: sha512-cIRRvZgrHfsAHrkt8LWdAX4+Do8R0MzQSfeo9yzErzHeYiuyNiP4PCTPbOy/wBXL4MYzt3ebrBa5jt3akQkKAg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-transform@0.117.0:
+ resolution: {integrity: sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==}
engines: {node: ^20.19.0 || >=22.12.0}
oxc-transform@0.95.0:
@@ -5130,9 +5867,6 @@ packages:
package-manager-detector@1.6.0:
resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
- pako@0.2.9:
- resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
-
pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
@@ -5192,9 +5926,9 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- path-scurry@2.0.1:
- resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
- engines: {node: 20 || >=22}
+ path-scurry@2.0.2:
+ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
+ engines: {node: 18 || 20 || >=22}
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
@@ -5252,20 +5986,20 @@ packages:
peerDependencies:
postcss: ^8.4.38
- postcss-colormin@7.0.5:
- resolution: {integrity: sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==}
+ postcss-colormin@7.0.6:
+ resolution: {integrity: sha512-oXM2mdx6IBTRm39797QguYzVEWzbdlFiMNfq88fCCN1Wepw3CYmJ/1/Ifa/KjWo+j5ZURDl2NTldLJIw51IeNQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
- postcss-convert-values@7.0.8:
- resolution: {integrity: sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==}
+ postcss-convert-values@7.0.9:
+ resolution: {integrity: sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
- postcss-discard-comments@7.0.5:
- resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==}
+ postcss-discard-comments@7.0.6:
+ resolution: {integrity: sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5294,8 +6028,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-merge-rules@7.0.7:
- resolution: {integrity: sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==}
+ postcss-merge-rules@7.0.8:
+ resolution: {integrity: sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5312,14 +6046,14 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-minify-params@7.0.5:
- resolution: {integrity: sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==}
+ postcss-minify-params@7.0.6:
+ resolution: {integrity: sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
- postcss-minify-selectors@7.0.5:
- resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==}
+ postcss-minify-selectors@7.0.6:
+ resolution: {integrity: sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5360,8 +6094,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-normalize-unicode@7.0.5:
- resolution: {integrity: sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==}
+ postcss-normalize-unicode@7.0.6:
+ resolution: {integrity: sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5384,8 +6118,8 @@ packages:
peerDependencies:
postcss: ^8.4.32
- postcss-reduce-initial@7.0.5:
- resolution: {integrity: sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==}
+ postcss-reduce-initial@7.0.6:
+ resolution: {integrity: sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5400,14 +6134,14 @@ packages:
resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
engines: {node: '>=4'}
- postcss-svgo@7.1.0:
- resolution: {integrity: sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==}
+ postcss-svgo@7.1.1:
+ resolution: {integrity: sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==}
engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
peerDependencies:
postcss: ^8.4.32
- postcss-unique-selectors@7.0.4:
- resolution: {integrity: sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==}
+ postcss-unique-selectors@7.0.5:
+ resolution: {integrity: sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5415,13 +6149,14 @@ packages:
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ postcss@8.5.8:
+ resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
engines: {node: ^10 || ^12 || >=14}
prebuild-install@7.1.3:
resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
engines: {node: '>=10'}
+ deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available.
hasBin: true
prelude-ls@1.2.1:
@@ -5444,15 +6179,11 @@ packages:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
- prompts@2.4.2:
- resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
- engines: {node: '>= 6'}
-
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
- prosemirror-changeset@2.3.1:
- resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==}
+ prosemirror-changeset@2.4.0:
+ resolution: {integrity: sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng==}
prosemirror-collab@1.3.1:
resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==}
@@ -5463,8 +6194,8 @@ packages:
prosemirror-dropcursor@1.8.2:
resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==}
- prosemirror-gapcursor@1.4.0:
- resolution: {integrity: sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==}
+ prosemirror-gapcursor@1.4.1:
+ resolution: {integrity: sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==}
prosemirror-history@1.5.0:
resolution: {integrity: sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==}
@@ -5475,11 +6206,11 @@ packages:
prosemirror-keymap@1.2.3:
resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==}
- prosemirror-markdown@1.13.3:
- resolution: {integrity: sha512-3E+Et6cdXIH0EgN2tGYQ+EBT7N4kMiZFsW+hzx+aPtOmADDHWCdd2uUQb7yklJrfUYUOjEEu22BiN6UFgPe4cQ==}
+ prosemirror-markdown@1.13.4:
+ resolution: {integrity: sha512-D98dm4cQ3Hs6EmjK500TdAOew4Z03EV71ajEFiWra3Upr7diytJsjF4mPV2dW+eK5uNectiRj0xFxYI9NLXDbw==}
- prosemirror-menu@1.2.5:
- resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==}
+ prosemirror-menu@1.3.0:
+ resolution: {integrity: sha512-TImyPXCHPcDsSka2/lwJ6WjTASr4re/qWq1yoTTuLOqfXucwF6VcRa2LWCkM/EyTD1UO3CUwiH8qURJoWJRxwg==}
prosemirror-model@1.25.4:
resolution: {integrity: sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==}
@@ -5506,14 +6237,14 @@ packages:
prosemirror-transform@1.11.0:
resolution: {integrity: sha512-4I7Ce4KpygXb9bkiPS3hTEk4dSHorfRw8uI0pE8IhxlK2GXsqv5tIA7JUSxtSu7u8APVOTtbUBxTmnHIxVkIJw==}
- prosemirror-view@1.41.5:
- resolution: {integrity: sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==}
+ prosemirror-view@1.41.6:
+ resolution: {integrity: sha512-mxpcDG4hNQa/CPtzxjdlir5bJFDlm0/x5nGBbStB2BWX+XOQ9M8ekEG+ojqB5BcVu2Rc80/jssCMZzSstJuSYg==}
protocols@2.0.2:
resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==}
- pump@3.0.3:
- resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
+ pump@3.0.4:
+ resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==}
punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
@@ -5542,6 +6273,9 @@ packages:
rc9@2.1.2:
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
+ rc9@3.0.0:
+ resolution: {integrity: sha512-MGOue0VqscKWQ104udASX/3GYDcKyPI4j4F8gu/jHHzglpmy9a/anZK3PNe8ug6aZFl+9GxLtdhe3kVZuMaQbA==}
+
rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -5622,8 +6356,8 @@ packages:
rehype-sort-attributes@5.0.1:
resolution: {integrity: sha512-Bxo+AKUIELcnnAZwJDt5zUDDRpt4uzhfz9d0PVGhcxYWsbFj5Cv35xuWxu5r1LeYNFNhgGqsr9Q2QiIOM/Qctg==}
- reka-ui@2.7.0:
- resolution: {integrity: sha512-m+XmxQN2xtFzBP3OAdIafKq7C8OETo2fqfxcIIxYmNN2Ch3r5oAf6yEYCIJg5tL/yJU2mHqF70dCCekUkrAnXA==}
+ reka-ui@2.8.2:
+ resolution: {integrity: sha512-8lTKcJhmG+D3UyJxhBnNnW/720sLzm0pbA9AC1MWazmJ5YchJAyTSl+O00xP/kxBmEN0fw5JqWVHguiFmsGjzA==}
peerDependencies:
vue: '>= 3.2.0'
@@ -5674,9 +6408,6 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
- restructure@3.0.2:
- resolution: {integrity: sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==}
-
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -5684,8 +6415,8 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rollup-plugin-visualizer@6.0.5:
- resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==}
+ rollup-plugin-visualizer@6.0.11:
+ resolution: {integrity: sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
@@ -5697,8 +6428,8 @@ packages:
rollup:
optional: true
- rollup@4.57.1:
- resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==}
+ rollup@4.59.0:
+ resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -5708,6 +6439,9 @@ packages:
rou3@0.7.12:
resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==}
+ rou3@0.8.1:
+ resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
+
run-applescript@7.1.0:
resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
engines: {node: '>=18'}
@@ -5721,11 +6455,8 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- sax@1.4.4:
- resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ sax@1.5.0:
+ resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==}
engines: {node: '>=11.0.0'}
scslre@0.3.0:
@@ -5739,8 +6470,8 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- semver@7.7.3:
- resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines: {node: '>=10'}
hasBin: true
@@ -5751,8 +6482,8 @@ packages:
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
- seroval@1.5.0:
- resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==}
+ seroval@1.5.1:
+ resolution: {integrity: sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==}
engines: {node: '>=10'}
serve-placeholder@2.0.2:
@@ -5786,8 +6517,12 @@ packages:
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines: {node: '>= 0.4'}
- shiki@3.22.0:
- resolution: {integrity: sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==}
+ shiki@3.23.0:
+ resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==}
+
+ shiki@4.0.2:
+ resolution: {integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ==}
+ engines: {node: '>=20'}
signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
@@ -5799,8 +6534,8 @@ packages:
simple-get@4.0.1:
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
- simple-git@3.30.0:
- resolution: {integrity: sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==}
+ simple-git@3.33.0:
+ resolution: {integrity: sha512-D4V/tGC2sjsoNhoMybKyGoE+v8A60hRawKQ1iFRA1zwuDgGZCBJ4ByOzZ5J8joBbi4Oam0qiPH+GhzmSBwbJng==}
sirv@3.0.2:
resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
@@ -5821,8 +6556,9 @@ packages:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
- smob@1.5.0:
- resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
+ smob@1.6.1:
+ resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==}
+ engines: {node: '>=20.0.0'}
socket.io-client@4.8.3:
resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==}
@@ -5856,22 +6592,23 @@ packages:
spdx-expression-parse@4.0.0:
resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
- spdx-license-ids@3.0.22:
- resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
+ spdx-license-ids@3.0.23:
+ resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
speakingurl@14.0.1:
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
engines: {node: '>=0.10.0'}
- split2@4.2.0:
- resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
- engines: {node: '>= 10.x'}
-
srvx@0.10.1:
resolution: {integrity: sha512-A//xtfak4eESMWWydSRFUVvCTQbSwivnGCEf8YGPe2eHU0+Z6znfUTCPF0a7oV3sObSOcrXHlL6Bs9vVctfXdg==}
engines: {node: '>=20.16.0'}
hasBin: true
+ srvx@0.11.9:
+ resolution: {integrity: sha512-97wWJS6F0KTKAhDlHVmBzMvlBOp5FiNp3XrLoodIgYJpXxgG5tE9rX4Pg7s46n2shI4wtEsMATTS1+rI3/ubzA==}
+ engines: {node: '>=20.16.0'}
+ hasBin: true
+
stable-hash-x@0.2.0:
resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
engines: {node: '>=12.0.0'}
@@ -5886,6 +6623,9 @@ packages:
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ std-env@4.0.0:
+ resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
+
streamx@2.23.0:
resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==}
@@ -5910,8 +6650,8 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.2:
- resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ strip-ansi@7.2.0:
+ resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
engines: {node: '>=12'}
strip-final-newline@3.0.0:
@@ -5926,18 +6666,14 @@ packages:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
- strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
-
strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
structured-clone-es@1.0.0:
resolution: {integrity: sha512-FL8EeKFFyNQv5cMnXI31CIMCsFarSVI2bF0U0ImeNE3g/F1IvJQyqzOXxPBRXiwQfyBTlbNe88jh1jFW0O/jiQ==}
- stylehacks@7.0.7:
- resolution: {integrity: sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==}
+ stylehacks@7.0.8:
+ resolution: {integrity: sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.4.32
@@ -5950,16 +6686,12 @@ packages:
resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
engines: {node: '>=18'}
- supports-color@7.2.0:
- resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
- engines: {node: '>=8'}
-
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- svgo@4.0.0:
- resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
+ svgo@4.0.1:
+ resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==}
engines: {node: '>=16'}
hasBin: true
@@ -5971,8 +6703,8 @@ packages:
resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
engines: {node: '>=20'}
- tailwind-merge@3.4.0:
- resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
+ tailwind-merge@3.5.0:
+ resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==}
tailwind-variants@3.2.2:
resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==}
@@ -5984,8 +6716,8 @@ packages:
tailwind-merge:
optional: true
- tailwindcss@4.1.18:
- resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
+ tailwindcss@4.2.1:
+ resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==}
tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
@@ -5998,20 +6730,23 @@ packages:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
- tar-stream@3.1.7:
- resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+ tar-stream@3.1.8:
+ resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==}
- tar@7.5.7:
- resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==}
+ tar@7.5.11:
+ resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==}
engines: {node: '>=18'}
+ teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
+
terser@5.46.0:
resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==}
engines: {node: '>=10'}
hasBin: true
- text-decoder@1.2.3:
- resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
+ text-decoder@1.2.7:
+ resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
tiny-inflate@1.0.3:
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
@@ -6019,10 +6754,18 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+ tinyclip@0.1.12:
+ resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==}
+ engines: {node: ^16.14.0 || >= 17.3.0}
+
tinyexec@1.0.2:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
+ tinyexec@1.0.4:
+ resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
+ engines: {node: '>=18'}
+
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines: {node: '>=12.0.0'}
@@ -6079,8 +6822,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- type-fest@5.4.3:
- resolution: {integrity: sha512-AXSAQJu79WGc79/3e9/CR77I/KQgeY1AhNvcShIH4PTcGYyC4xv6H4R4AUOwkPS5799KlVDAu8zExeCrkGquiA==}
+ type-fest@5.4.4:
+ resolution: {integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==}
engines: {node: '>=20'}
type-level-regexp@0.1.17:
@@ -6116,19 +6859,13 @@ packages:
unenv@2.0.0-rc.24:
resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
- unhead@2.1.2:
- resolution: {integrity: sha512-vSihrxyb+zsEUfEbraZBCjdE0p/WSoc2NGDrpwwSNAwuPxhYK1nH3eegf02IENLpn1sUhL8IoO84JWmRQ6tILA==}
+ unhead@2.1.12:
+ resolution: {integrity: sha512-iTHdWD9ztTunOErtfUFk6Wr11BxvzumcYJ0CzaSCBUOEtg+DUZ9+gnE99i8QkLFT2q1rZD48BYYGXpOZVDLYkA==}
unicode-emoji-modifier-base@1.0.0:
resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
engines: {node: '>=4'}
- unicode-properties@1.4.1:
- resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==}
-
- unicode-trie@2.0.0:
- resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==}
-
unicorn-magic@0.3.0:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
@@ -6140,11 +6877,15 @@ packages:
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
- unifont@0.6.0:
- resolution: {integrity: sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==}
+ unifont@0.7.4:
+ resolution: {integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==}
+
+ unimport@5.7.0:
+ resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==}
+ engines: {node: '>=18.12.0'}
- unimport@5.6.0:
- resolution: {integrity: sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A==}
+ unimport@6.0.1:
+ resolution: {integrity: sha512-RbT3PfMshH2eYH5ylQuCf1sUQ1ocygZp57HaBNIp96g1upcTZnIstCfl6ZbZM7KHI88K3jmwhgeMxwtYsWSqug==}
engines: {node: '>=18.12.0'}
unist-builder@4.0.0:
@@ -6180,10 +6921,6 @@ packages:
'@vueuse/core':
optional: true
- unplugin-utils@0.2.5:
- resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==}
- engines: {node: '>=18.12.0'}
-
unplugin-utils@0.3.1:
resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==}
engines: {node: '>=20.19.0'}
@@ -6200,6 +6937,7 @@ packages:
unplugin-vue-router@0.16.2:
resolution: {integrity: sha512-lE6ZjnHaXfS2vFI/PSEwdKcdOo5RwAbCKUnPBIN9YwLgSWas3x+qivzQvJa/uxhKzJldE6WK43aDKjGj9Rij9w==}
+ deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html'
peerDependencies:
'@vue/compiler-sfc': ^3.5.17
vue-router: ^4.6.0
@@ -6209,6 +6947,7 @@ packages:
unplugin-vue-router@0.19.2:
resolution: {integrity: sha512-u5dgLBarxE5cyDK/hzJGfpCTLIAyiTXGlo85COuD4Nssj6G7NxS+i9mhCWz/1p/ud1eMwdcUbTXehQe41jYZUA==}
+ deprecated: 'Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html'
peerDependencies:
'@vue/compiler-sfc': ^3.5.17
vue-router: ^4.6.0
@@ -6220,6 +6959,13 @@ packages:
resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
engines: {node: '>=18.12.0'}
+ unplugin@3.0.0:
+ resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ unrouting@0.1.7:
+ resolution: {integrity: sha512-+0hfD+CVWtD636rc5Fn9VEjjTEDhdqgMpbwAuVoUmydSHDaMNiFW93SJG4LV++RoGSEAyvQN5uABAscYpDphpQ==}
+
unrs-resolver@1.11.1:
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
@@ -6443,16 +7189,16 @@ packages:
vue-bundle-renderer@2.2.0:
resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==}
- vue-component-meta@3.2.4:
- resolution: {integrity: sha512-FHUxalhR36Kfmrd5B4yfw7kmnCsZL3SGc2vTgzeEGAcLyuhhB0d1j2VmfXvx5pnHLI+kvCb+bxGsRcNgrUJ0Ww==}
+ vue-component-meta@3.2.5:
+ resolution: {integrity: sha512-i7v7S6atD9aZZPouwceJoqcmBzjI4uRIxOj5dDcBPiIhFoY+U5kmy7PnEaAOh/iilJQI7I8F3lKdyZmRdplUpA==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- vue-component-type-helpers@3.2.4:
- resolution: {integrity: sha512-05lR16HeZDcDpB23ku5b5f1fBOoHqFnMiKRr2CiEvbG5Ux4Yi0McmQBOET0dR0nxDXosxyVqv67q6CzS3AK8rw==}
+ vue-component-type-helpers@3.2.5:
+ resolution: {integrity: sha512-tkvNr+bU8+xD/onAThIe7CHFvOJ/BO6XCOrxMzeytJq40nTfpGDJuVjyCM8ccGZKfAbGk2YfuZyDMXM56qheZQ==}
vue-demi@0.14.10:
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
@@ -6468,14 +7214,14 @@ packages:
vue-devtools-stub@0.1.0:
resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
- vue-eslint-parser@10.2.0:
- resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==}
+ vue-eslint-parser@10.4.0:
+ resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- vue-i18n@11.2.8:
- resolution: {integrity: sha512-vJ123v/PXCZntd6Qj5Jumy7UBmIuE92VrtdX+AXr+1WzdBHojiBxnAxdfctUFL+/JIN+VQH4BhsfTtiGsvVObg==}
+ vue-i18n@11.3.0:
+ resolution: {integrity: sha512-1J+xDfDJTLhDxElkd3+XUhT7FYSZd2b8pa7IRKGxhWH/8yt6PTvi3xmWhGwhYT5EaXdatui11pF2R6tL73/zPA==}
engines: {node: '>= 16'}
peerDependencies:
vue: ^3.0.0
@@ -6485,14 +7231,29 @@ packages:
peerDependencies:
vue: ^3.5.0
- vue-tsc@3.2.4:
- resolution: {integrity: sha512-xj3YCvSLNDKt1iF9OcImWHhmYcihVu9p4b9s4PGR/qp6yhW+tZJaypGxHScRyOrdnHvaOeF+YkZOdKwbgGvp5g==}
+ vue-router@5.0.3:
+ resolution: {integrity: sha512-nG1c7aAFac7NYj8Hluo68WyWfc41xkEjaR0ViLHCa3oDvTQ/nIuLJlXJX1NUPw/DXzx/8+OKMng045HHQKQKWw==}
+ peerDependencies:
+ '@pinia/colada': '>=0.21.2'
+ '@vue/compiler-sfc': ^3.5.17
+ pinia: ^3.0.4
+ vue: ^3.5.0
+ peerDependenciesMeta:
+ '@pinia/colada':
+ optional: true
+ '@vue/compiler-sfc':
+ optional: true
+ pinia:
+ optional: true
+
+ vue-tsc@3.2.6:
+ resolution: {integrity: sha512-gYW/kWI0XrwGzd0PKc7tVB/qpdeAkIZLNZb10/InizkQjHjnT8weZ/vBarZoj4kHKbUTZT/bAVgoOr8x4NsQ/Q==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
- vue@3.5.27:
- resolution: {integrity: sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==}
+ vue@3.5.30:
+ resolution: {integrity: sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -6632,8 +7393,8 @@ packages:
youch-core@0.3.3:
resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
- youch@4.1.0-beta.13:
- resolution: {integrity: sha512-3+AG1Xvt+R7M7PSDudhbfbwiyveW6B8PLBIwTyEC598biEYIjHhC89i6DBEvR0EZUjGY3uGSnC429HpIa2Z09g==}
+ youch@4.1.0:
+ resolution: {integrity: sha512-cYekNh2tUoU+voS11X0D0UQntVCSO6LQ1h10VriQGmfbpf0mnGTruwZICts23UUNiZCXm8H8hQBtRrdsbhuNNg==}
zip-stream@6.0.1:
resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
@@ -6681,7 +7442,7 @@ snapshots:
'@babel/core@7.29.0':
dependencies:
'@babel/code-frame': 7.29.0
- '@babel/generator': 7.29.0
+ '@babel/generator': 7.29.1
'@babel/helper-compilation-targets': 7.28.6
'@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
'@babel/helpers': 7.28.6
@@ -6698,7 +7459,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.29.0':
+ '@babel/generator@7.29.1':
dependencies:
'@babel/parser': 7.29.0
'@babel/types': 7.29.0
@@ -6823,7 +7584,7 @@ snapshots:
'@babel/traverse@7.29.0':
dependencies:
'@babel/code-frame': 7.29.0
- '@babel/generator': 7.29.0
+ '@babel/generator': 7.29.1
'@babel/helper-globals': 7.28.0
'@babel/parser': 7.29.0
'@babel/template': 7.28.6
@@ -6837,94 +7598,98 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@bomb.sh/tab@0.0.11(cac@6.7.14)(citty@0.1.6)':
+ '@bomb.sh/tab@0.0.14(cac@6.7.14)(citty@0.2.1)':
optionalDependencies:
cac: 6.7.14
- citty: 0.1.6
+ citty: 0.2.1
- '@capsizecss/unpack@3.0.1':
+ '@capsizecss/unpack@4.0.0':
dependencies:
- fontkit: 2.0.4
+ fontkitten: 1.0.3
- '@clack/core@0.5.0':
+ '@clack/core@1.0.0':
dependencies:
picocolors: 1.1.1
sisteransi: 1.0.5
- '@clack/core@1.0.0-alpha.7':
+ '@clack/core@1.1.0':
dependencies:
- picocolors: 1.1.1
sisteransi: 1.0.5
- '@clack/prompts@0.11.0':
+ '@clack/prompts@1.0.0':
dependencies:
- '@clack/core': 0.5.0
+ '@clack/core': 1.0.0
picocolors: 1.1.1
sisteransi: 1.0.5
- '@clack/prompts@1.0.0-alpha.9':
+ '@clack/prompts@1.1.0':
dependencies:
- '@clack/core': 1.0.0-alpha.7
- picocolors: 1.1.1
+ '@clack/core': 1.1.0
sisteransi: 1.0.5
'@cloudflare/kv-asset-handler@0.4.2': {}
- '@commitlint/cli@20.4.0(@types/node@25.2.0)(typescript@5.9.3)':
+ '@commitlint/cli@20.5.0(@types/node@25.2.0)(conventional-commits-parser@6.3.0)(typescript@5.9.3)':
dependencies:
- '@commitlint/format': 20.4.0
- '@commitlint/lint': 20.4.0
- '@commitlint/load': 20.4.0(@types/node@25.2.0)(typescript@5.9.3)
- '@commitlint/read': 20.4.0
- '@commitlint/types': 20.4.0
- tinyexec: 1.0.2
+ '@commitlint/format': 20.5.0
+ '@commitlint/lint': 20.5.0
+ '@commitlint/load': 20.5.0(@types/node@25.2.0)(typescript@5.9.3)
+ '@commitlint/read': 20.5.0(conventional-commits-parser@6.3.0)
+ '@commitlint/types': 20.5.0
+ tinyexec: 1.0.4
yargs: 17.7.2
transitivePeerDependencies:
- '@types/node'
+ - conventional-commits-filter
+ - conventional-commits-parser
- typescript
- '@commitlint/config-conventional@20.4.0':
+ '@commitlint/config-conventional@20.5.0':
dependencies:
- '@commitlint/types': 20.4.0
- conventional-changelog-conventionalcommits: 9.1.0
+ '@commitlint/types': 20.5.0
+ conventional-changelog-conventionalcommits: 9.3.0
- '@commitlint/config-validator@20.4.0':
+ '@commitlint/config-validator@20.5.0':
dependencies:
- '@commitlint/types': 20.4.0
- ajv: 8.17.1
+ '@commitlint/types': 20.5.0
+ ajv: 8.18.0
- '@commitlint/ensure@20.4.0':
+ '@commitlint/ensure@20.5.0':
dependencies:
- '@commitlint/types': 20.4.0
- kasi: 2.0.1
+ '@commitlint/types': 20.5.0
+ lodash.camelcase: 4.3.0
+ lodash.kebabcase: 4.1.1
+ lodash.snakecase: 4.1.1
+ lodash.startcase: 4.4.0
+ lodash.upperfirst: 4.3.1
'@commitlint/execute-rule@20.0.0': {}
- '@commitlint/format@20.4.0':
+ '@commitlint/format@20.5.0':
dependencies:
- '@commitlint/types': 20.4.0
+ '@commitlint/types': 20.5.0
picocolors: 1.1.1
- '@commitlint/is-ignored@20.4.0':
+ '@commitlint/is-ignored@20.5.0':
dependencies:
- '@commitlint/types': 20.4.0
- semver: 7.7.3
+ '@commitlint/types': 20.5.0
+ semver: 7.7.4
- '@commitlint/lint@20.4.0':
+ '@commitlint/lint@20.5.0':
dependencies:
- '@commitlint/is-ignored': 20.4.0
- '@commitlint/parse': 20.4.0
- '@commitlint/rules': 20.4.0
- '@commitlint/types': 20.4.0
+ '@commitlint/is-ignored': 20.5.0
+ '@commitlint/parse': 20.5.0
+ '@commitlint/rules': 20.5.0
+ '@commitlint/types': 20.5.0
- '@commitlint/load@20.4.0(@types/node@25.2.0)(typescript@5.9.3)':
+ '@commitlint/load@20.5.0(@types/node@25.2.0)(typescript@5.9.3)':
dependencies:
- '@commitlint/config-validator': 20.4.0
+ '@commitlint/config-validator': 20.5.0
'@commitlint/execute-rule': 20.0.0
- '@commitlint/resolve-extends': 20.4.0
- '@commitlint/types': 20.4.0
- cosmiconfig: 9.0.0(typescript@5.9.3)
- cosmiconfig-typescript-loader: 6.2.0(@types/node@25.2.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3)
+ '@commitlint/resolve-extends': 20.5.0
+ '@commitlint/types': 20.5.0
+ cosmiconfig: 9.0.1(typescript@5.9.3)
+ cosmiconfig-typescript-loader: 6.2.0(@types/node@25.2.0)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3)
is-plain-obj: 4.1.0
lodash.mergewith: 4.6.2
picocolors: 1.1.1
@@ -6932,56 +7697,78 @@ snapshots:
- '@types/node'
- typescript
- '@commitlint/message@20.4.0': {}
+ '@commitlint/message@20.4.3': {}
- '@commitlint/parse@20.4.0':
+ '@commitlint/parse@20.5.0':
dependencies:
- '@commitlint/types': 20.4.0
- conventional-changelog-angular: 8.1.0
- conventional-commits-parser: 6.2.1
+ '@commitlint/types': 20.5.0
+ conventional-changelog-angular: 8.3.0
+ conventional-commits-parser: 6.3.0
- '@commitlint/read@20.4.0':
+ '@commitlint/read@20.5.0(conventional-commits-parser@6.3.0)':
dependencies:
- '@commitlint/top-level': 20.4.0
- '@commitlint/types': 20.4.0
- git-raw-commits: 4.0.0
+ '@commitlint/top-level': 20.4.3
+ '@commitlint/types': 20.5.0
+ git-raw-commits: 5.0.1(conventional-commits-parser@6.3.0)
minimist: 1.2.8
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
+ transitivePeerDependencies:
+ - conventional-commits-filter
+ - conventional-commits-parser
- '@commitlint/resolve-extends@20.4.0':
+ '@commitlint/resolve-extends@20.5.0':
dependencies:
- '@commitlint/config-validator': 20.4.0
- '@commitlint/types': 20.4.0
+ '@commitlint/config-validator': 20.5.0
+ '@commitlint/types': 20.5.0
global-directory: 4.0.1
import-meta-resolve: 4.2.0
lodash.mergewith: 4.6.2
resolve-from: 5.0.0
- '@commitlint/rules@20.4.0':
+ '@commitlint/rules@20.5.0':
dependencies:
- '@commitlint/ensure': 20.4.0
- '@commitlint/message': 20.4.0
+ '@commitlint/ensure': 20.5.0
+ '@commitlint/message': 20.4.3
'@commitlint/to-lines': 20.0.0
- '@commitlint/types': 20.4.0
+ '@commitlint/types': 20.5.0
'@commitlint/to-lines@20.0.0': {}
- '@commitlint/top-level@20.4.0':
+ '@commitlint/top-level@20.4.3':
dependencies:
escalade: 3.2.0
- '@commitlint/types@20.4.0':
+ '@commitlint/types@20.5.0':
dependencies:
- conventional-commits-parser: 6.2.1
+ conventional-commits-parser: 6.3.0
picocolors: 1.1.1
- '@dxup/nuxt@0.3.2(magicast@0.5.1)':
+ '@conventional-changelog/git-client@2.6.0(conventional-commits-parser@6.3.0)':
+ dependencies:
+ '@simple-libs/child-process-utils': 1.0.2
+ '@simple-libs/stream-utils': 1.2.0
+ semver: 7.7.4
+ optionalDependencies:
+ conventional-commits-parser: 6.3.0
+
+ '@dxup/nuxt@0.3.2(magicast@0.5.2)':
+ dependencies:
+ '@dxup/unimport': 0.1.2
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ chokidar: 5.0.0
+ pathe: 2.0.3
+ tinyglobby: 0.2.15
+ transitivePeerDependencies:
+ - magicast
+
+ '@dxup/nuxt@0.4.0(magicast@0.5.2)(typescript@5.9.3)':
dependencies:
'@dxup/unimport': 0.1.2
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
chokidar: 5.0.0
pathe: 2.0.3
tinyglobby: 0.2.15
+ typescript: 5.9.3
transitivePeerDependencies:
- magicast
@@ -6993,273 +7780,345 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@emnapi/core@1.9.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.0
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/runtime@1.8.1':
dependencies:
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.9.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/wasi-threads@1.1.0':
dependencies:
tslib: 2.8.1
optional: true
- '@es-joy/jsdoccomment@0.83.0':
+ '@emnapi/wasi-threads@1.2.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@es-joy/jsdoccomment@0.84.0':
dependencies:
'@types/estree': 1.0.8
- '@typescript-eslint/types': 8.54.0
+ '@typescript-eslint/types': 8.57.0
comment-parser: 1.4.5
esquery: 1.7.0
- jsdoc-type-pratt-parser: 7.1.0
+ jsdoc-type-pratt-parser: 7.1.1
'@es-joy/resolve.exports@1.2.0': {}
'@esbuild/aix-ppc64@0.25.12':
optional: true
- '@esbuild/aix-ppc64@0.27.2':
+ '@esbuild/aix-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.4':
optional: true
'@esbuild/android-arm64@0.25.12':
optional: true
- '@esbuild/android-arm64@0.27.2':
+ '@esbuild/android-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.4':
optional: true
'@esbuild/android-arm@0.25.12':
optional: true
- '@esbuild/android-arm@0.27.2':
+ '@esbuild/android-arm@0.27.3':
+ optional: true
+
+ '@esbuild/android-arm@0.27.4':
optional: true
'@esbuild/android-x64@0.25.12':
optional: true
- '@esbuild/android-x64@0.27.2':
+ '@esbuild/android-x64@0.27.3':
+ optional: true
+
+ '@esbuild/android-x64@0.27.4':
optional: true
'@esbuild/darwin-arm64@0.25.12':
optional: true
- '@esbuild/darwin-arm64@0.27.2':
+ '@esbuild/darwin-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.4':
optional: true
'@esbuild/darwin-x64@0.25.12':
optional: true
- '@esbuild/darwin-x64@0.27.2':
+ '@esbuild/darwin-x64@0.27.3':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.4':
optional: true
'@esbuild/freebsd-arm64@0.25.12':
optional: true
- '@esbuild/freebsd-arm64@0.27.2':
+ '@esbuild/freebsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.4':
optional: true
'@esbuild/freebsd-x64@0.25.12':
optional: true
- '@esbuild/freebsd-x64@0.27.2':
+ '@esbuild/freebsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.4':
optional: true
'@esbuild/linux-arm64@0.25.12':
optional: true
- '@esbuild/linux-arm64@0.27.2':
+ '@esbuild/linux-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.4':
optional: true
'@esbuild/linux-arm@0.25.12':
optional: true
- '@esbuild/linux-arm@0.27.2':
+ '@esbuild/linux-arm@0.27.3':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.4':
optional: true
'@esbuild/linux-ia32@0.25.12':
optional: true
- '@esbuild/linux-ia32@0.27.2':
+ '@esbuild/linux-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.4':
optional: true
'@esbuild/linux-loong64@0.25.12':
optional: true
- '@esbuild/linux-loong64@0.27.2':
+ '@esbuild/linux-loong64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.4':
optional: true
'@esbuild/linux-mips64el@0.25.12':
optional: true
- '@esbuild/linux-mips64el@0.27.2':
+ '@esbuild/linux-mips64el@0.27.3':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.4':
optional: true
'@esbuild/linux-ppc64@0.25.12':
optional: true
- '@esbuild/linux-ppc64@0.27.2':
+ '@esbuild/linux-ppc64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.4':
optional: true
'@esbuild/linux-riscv64@0.25.12':
optional: true
- '@esbuild/linux-riscv64@0.27.2':
+ '@esbuild/linux-riscv64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.4':
optional: true
'@esbuild/linux-s390x@0.25.12':
optional: true
- '@esbuild/linux-s390x@0.27.2':
+ '@esbuild/linux-s390x@0.27.3':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.4':
optional: true
'@esbuild/linux-x64@0.25.12':
optional: true
- '@esbuild/linux-x64@0.27.2':
+ '@esbuild/linux-x64@0.27.3':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.4':
optional: true
'@esbuild/netbsd-arm64@0.25.12':
optional: true
- '@esbuild/netbsd-arm64@0.27.2':
+ '@esbuild/netbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.4':
optional: true
'@esbuild/netbsd-x64@0.25.12':
optional: true
- '@esbuild/netbsd-x64@0.27.2':
+ '@esbuild/netbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.4':
optional: true
'@esbuild/openbsd-arm64@0.25.12':
optional: true
- '@esbuild/openbsd-arm64@0.27.2':
+ '@esbuild/openbsd-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.4':
optional: true
'@esbuild/openbsd-x64@0.25.12':
optional: true
- '@esbuild/openbsd-x64@0.27.2':
+ '@esbuild/openbsd-x64@0.27.3':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.4':
optional: true
'@esbuild/openharmony-arm64@0.25.12':
optional: true
- '@esbuild/openharmony-arm64@0.27.2':
+ '@esbuild/openharmony-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.4':
optional: true
'@esbuild/sunos-x64@0.25.12':
optional: true
- '@esbuild/sunos-x64@0.27.2':
+ '@esbuild/sunos-x64@0.27.3':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.4':
optional: true
'@esbuild/win32-arm64@0.25.12':
optional: true
- '@esbuild/win32-arm64@0.27.2':
+ '@esbuild/win32-arm64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.4':
optional: true
'@esbuild/win32-ia32@0.25.12':
optional: true
- '@esbuild/win32-ia32@0.27.2':
+ '@esbuild/win32-ia32@0.27.3':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.4':
optional: true
'@esbuild/win32-x64@0.25.12':
optional: true
- '@esbuild/win32-x64@0.27.2':
+ '@esbuild/win32-x64@0.27.3':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.4':
optional: true
- '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))':
+ '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))':
dependencies:
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/compat@1.4.1(eslint@9.39.2(jiti@2.6.1))':
+ '@eslint/compat@2.0.3(eslint@10.1.0(jiti@2.6.1))':
dependencies:
- '@eslint/core': 0.17.0
+ '@eslint/core': 1.1.1
optionalDependencies:
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
- '@eslint/config-array@0.21.1':
+ '@eslint/config-array@0.23.3':
dependencies:
- '@eslint/object-schema': 2.1.7
+ '@eslint/object-schema': 3.0.3
debug: 4.4.3
- minimatch: 3.1.2
+ minimatch: 10.2.4
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.4.2':
+ '@eslint/config-helpers@0.5.3':
dependencies:
- '@eslint/core': 0.17.0
+ '@eslint/core': 1.1.1
- '@eslint/config-helpers@0.5.2':
- dependencies:
- '@eslint/core': 1.1.0
-
- '@eslint/config-inspector@1.4.2(eslint@9.39.2(jiti@2.6.1))':
+ '@eslint/config-inspector@1.5.0(eslint@10.1.0(jiti@2.6.1))':
dependencies:
ansis: 4.2.0
- bundle-require: 5.1.0(esbuild@0.27.2)
- cac: 6.7.14
- chokidar: 4.0.3
- esbuild: 0.27.2
- eslint: 9.39.2(jiti@2.6.1)
- h3: 1.15.5
+ bundle-require: 5.1.0(esbuild@0.27.4)
+ cac: 7.0.0
+ chokidar: 5.0.0
+ esbuild: 0.27.4
+ eslint: 10.1.0(jiti@2.6.1)
+ h3: 1.15.6
tinyglobby: 0.2.15
ws: 8.19.0
transitivePeerDependencies:
- bufferutil
- utf-8-validate
- '@eslint/core@0.17.0':
- dependencies:
- '@types/json-schema': 7.0.15
-
- '@eslint/core@1.1.0':
+ '@eslint/core@1.1.1':
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.3.3':
- dependencies:
- ajv: 6.12.6
- debug: 4.4.3
- espree: 10.4.0
- globals: 14.0.0
- ignore: 5.3.2
- import-fresh: 3.3.1
- js-yaml: 4.1.1
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
+ '@eslint/js@9.39.4': {}
- '@eslint/js@9.39.2': {}
+ '@eslint/object-schema@3.0.3': {}
- '@eslint/object-schema@2.1.7': {}
-
- '@eslint/plugin-kit@0.4.1':
+ '@eslint/plugin-kit@0.6.1':
dependencies:
- '@eslint/core': 0.17.0
+ '@eslint/core': 1.1.1
levn: 0.4.1
- '@floating-ui/core@1.7.4':
+ '@floating-ui/core@1.7.5':
dependencies:
- '@floating-ui/utils': 0.2.10
+ '@floating-ui/utils': 0.2.11
- '@floating-ui/dom@1.7.5':
+ '@floating-ui/dom@1.7.6':
dependencies:
- '@floating-ui/core': 1.7.4
- '@floating-ui/utils': 0.2.10
+ '@floating-ui/core': 1.7.5
+ '@floating-ui/utils': 0.2.11
- '@floating-ui/utils@0.2.10': {}
+ '@floating-ui/utils@0.2.11': {}
- '@floating-ui/vue@1.1.10(vue@3.5.27(typescript@5.9.3))':
+ '@floating-ui/vue@1.1.11(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@floating-ui/dom': 1.7.5
- '@floating-ui/utils': 0.2.10
- vue-demi: 0.14.10(vue@3.5.27(typescript@5.9.3))
+ '@floating-ui/dom': 1.7.6
+ '@floating-ui/utils': 0.2.11
+ vue-demi: 0.14.10(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -7275,11 +8134,11 @@ snapshots:
'@humanwhocodes/retry@0.4.3': {}
- '@iconify-json/lucide@1.2.87':
+ '@iconify-json/lucide@1.2.98':
dependencies:
'@iconify/types': 2.0.0
- '@iconify/collections@1.0.645':
+ '@iconify/collections@1.0.659':
dependencies:
'@iconify/types': 2.0.0
@@ -7289,26 +8148,26 @@ snapshots:
dependencies:
'@antfu/install-pkg': 1.1.0
'@iconify/types': 2.0.0
- mlly: 1.8.0
+ mlly: 1.8.1
- '@iconify/vue@5.0.0(vue@3.5.27(typescript@5.9.3))':
+ '@iconify/vue@5.0.0(vue@3.5.30(typescript@5.9.3))':
dependencies:
'@iconify/types': 2.0.0
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
- '@internationalized/date@3.10.1':
+ '@internationalized/date@3.12.0':
dependencies:
- '@swc/helpers': 0.5.18
+ '@swc/helpers': 0.5.19
'@internationalized/number@3.6.5':
dependencies:
- '@swc/helpers': 0.5.18
+ '@swc/helpers': 0.5.19
- '@intlify/bundle-utils@11.0.3(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))':
+ '@intlify/bundle-utils@11.0.7(vue-i18n@11.3.0(vue@3.5.30(typescript@5.9.3)))':
dependencies:
- '@intlify/message-compiler': 11.2.8
- '@intlify/shared': 11.2.8
- acorn: 8.15.0
+ '@intlify/message-compiler': 11.3.0
+ '@intlify/shared': 11.3.0
+ acorn: 8.16.0
esbuild: 0.25.12
escodegen: 2.1.0
estree-walker: 2.0.2
@@ -7316,47 +8175,53 @@ snapshots:
source-map-js: 1.2.1
yaml-eslint-parser: 1.3.2
optionalDependencies:
- vue-i18n: 11.2.8(vue@3.5.27(typescript@5.9.3))
+ vue-i18n: 11.3.0(vue@3.5.30(typescript@5.9.3))
+
+ '@intlify/core-base@11.3.0':
+ dependencies:
+ '@intlify/devtools-types': 11.3.0
+ '@intlify/message-compiler': 11.3.0
+ '@intlify/shared': 11.3.0
- '@intlify/core-base@11.2.8':
+ '@intlify/core@11.3.0':
dependencies:
- '@intlify/message-compiler': 11.2.8
- '@intlify/shared': 11.2.8
+ '@intlify/core-base': 11.3.0
+ '@intlify/shared': 11.3.0
- '@intlify/core@11.2.8':
+ '@intlify/devtools-types@11.3.0':
dependencies:
- '@intlify/core-base': 11.2.8
- '@intlify/shared': 11.2.8
+ '@intlify/core-base': 11.3.0
+ '@intlify/shared': 11.3.0
'@intlify/h3@0.7.4':
dependencies:
- '@intlify/core': 11.2.8
+ '@intlify/core': 11.3.0
'@intlify/utils': 0.13.0
- '@intlify/message-compiler@11.2.8':
+ '@intlify/message-compiler@11.3.0':
dependencies:
- '@intlify/shared': 11.2.8
+ '@intlify/shared': 11.3.0
source-map-js: 1.2.1
- '@intlify/shared@11.2.8': {}
+ '@intlify/shared@11.3.0': {}
- '@intlify/unplugin-vue-i18n@11.0.3(@vue/compiler-dom@3.5.27)(eslint@9.39.2(jiti@2.6.1))(rollup@4.57.1)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))':
+ '@intlify/unplugin-vue-i18n@11.0.7(@vue/compiler-dom@3.5.30)(eslint@10.1.0(jiti@2.6.1))(rollup@4.59.0)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
- '@intlify/bundle-utils': 11.0.3(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))
- '@intlify/shared': 11.2.8
- '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.2.8)(@vue/compiler-dom@3.5.27)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
- '@typescript-eslint/scope-manager': 8.54.0
- '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
+ '@intlify/bundle-utils': 11.0.7(vue-i18n@11.3.0(vue@3.5.30(typescript@5.9.3)))
+ '@intlify/shared': 11.3.0
+ '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.30)(vue-i18n@11.3.0(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
+ '@typescript-eslint/scope-manager': 8.57.0
+ '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3)
debug: 4.4.3
fast-glob: 3.3.3
pathe: 2.0.3
picocolors: 1.1.1
unplugin: 2.3.11
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
optionalDependencies:
- vue-i18n: 11.2.8(vue@3.5.27(typescript@5.9.3))
+ vue-i18n: 11.3.0(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/compiler-dom'
- eslint
@@ -7366,35 +8231,29 @@ snapshots:
'@intlify/utils@0.13.0': {}
- '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.2.8)(@vue/compiler-dom@3.5.27)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))':
+ '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.3.0)(@vue/compiler-dom@3.5.30)(vue-i18n@11.3.0(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))':
dependencies:
'@babel/parser': 7.29.0
optionalDependencies:
- '@intlify/shared': 11.2.8
- '@vue/compiler-dom': 3.5.27
- vue: 3.5.27(typescript@5.9.3)
- vue-i18n: 11.2.8(vue@3.5.27(typescript@5.9.3))
-
- '@ioredis/commands@1.5.0': {}
+ '@intlify/shared': 11.3.0
+ '@vue/compiler-dom': 3.5.30
+ vue: 3.5.30(typescript@5.9.3)
+ vue-i18n: 11.3.0(vue@3.5.30(typescript@5.9.3))
- '@isaacs/balanced-match@4.0.1': {}
-
- '@isaacs/brace-expansion@5.0.0':
- dependencies:
- '@isaacs/balanced-match': 4.0.1
+ '@ioredis/commands@1.5.1': {}
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@isaacs/fs-minipass@4.0.1':
dependencies:
- minipass: 7.1.2
+ minipass: 7.1.3
'@jridgewell/gen-mapping@0.3.13':
dependencies:
@@ -7437,22 +8296,22 @@ snapshots:
https-proxy-agent: 7.0.6
node-fetch: 2.7.0
nopt: 8.1.0
- semver: 7.7.3
- tar: 7.5.7
+ semver: 7.7.4
+ tar: 7.5.11
transitivePeerDependencies:
- encoding
- supports-color
- '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.57.1)':
+ '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
json5: 2.2.3
- rollup: 4.57.1
+ rollup: 4.59.0
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
- '@emnapi/core': 1.8.1
- '@emnapi/runtime': 1.8.1
+ '@emnapi/core': 1.9.0
+ '@emnapi/runtime': 1.9.0
'@tybys/wasm-util': 0.10.1
optional: true
@@ -7475,50 +8334,91 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1
- '@nuxt/cli@3.32.0(cac@6.7.14)(magicast@0.5.1)':
+ '@nuxt/cli@3.34.0(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2)':
dependencies:
- '@bomb.sh/tab': 0.0.11(cac@6.7.14)(citty@0.1.6)
- '@clack/prompts': 1.0.0-alpha.9
- c12: 3.3.3(magicast@0.5.1)
- citty: 0.1.6
- confbox: 0.2.2
+ '@bomb.sh/tab': 0.0.14(cac@6.7.14)(citty@0.2.1)
+ '@clack/prompts': 1.1.0
+ c12: 3.3.3(magicast@0.5.2)
+ citty: 0.2.1
+ confbox: 0.2.4
consola: 3.4.2
- copy-paste: 2.2.0
debug: 4.4.3
defu: 6.1.4
exsolve: 1.0.8
fuse.js: 7.1.0
- giget: 2.0.0
+ fzf: 0.5.2
+ giget: 3.1.2
jiti: 2.6.1
listhen: 1.9.0
- nypm: 0.6.4
+ nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 2.1.0
pkg-types: 2.3.0
scule: 1.3.0
- semver: 7.7.3
- srvx: 0.10.1
+ semver: 7.7.4
+ srvx: 0.11.9
+ std-env: 3.10.0
+ tinyclip: 0.1.12
+ tinyexec: 1.0.2
+ ufo: 1.6.3
+ youch: 4.1.0
+ optionalDependencies:
+ '@nuxt/schema': 4.3.1
+ transitivePeerDependencies:
+ - cac
+ - commander
+ - magicast
+ - supports-color
+
+ '@nuxt/cli@3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)':
+ dependencies:
+ '@bomb.sh/tab': 0.0.14(cac@6.7.14)(citty@0.2.1)
+ '@clack/prompts': 1.1.0
+ c12: 3.3.3(magicast@0.5.2)
+ citty: 0.2.1
+ confbox: 0.2.4
+ consola: 3.4.2
+ debug: 4.4.3
+ defu: 6.1.4
+ exsolve: 1.0.8
+ fuse.js: 7.1.0
+ fzf: 0.5.2
+ giget: 3.1.2
+ jiti: 2.6.1
+ listhen: 1.9.0
+ nypm: 0.6.5
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.0
+ scule: 1.3.0
+ semver: 7.7.4
+ srvx: 0.11.9
std-env: 3.10.0
+ tinyclip: 0.1.12
tinyexec: 1.0.2
ufo: 1.6.3
- youch: 4.1.0-beta.13
+ youch: 4.1.0
+ optionalDependencies:
+ '@nuxt/schema': 4.4.2
transitivePeerDependencies:
- cac
- commander
- magicast
- supports-color
- '@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1)':
+ '@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.2)':
dependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@nuxtjs/mdc': 0.20.0(magicast@0.5.1)
- '@shikijs/langs': 3.22.0
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxtjs/mdc': 0.20.2(magicast@0.5.2)
+ '@shikijs/langs': 3.23.0
'@sqlite.org/sqlite-wasm': 3.50.4-build1
'@standard-schema/spec': 1.1.0
'@webcontainer/env': 1.1.1
- c12: 3.3.3(magicast@0.5.1)
+ c12: 3.3.3(magicast@0.5.2)
chokidar: 5.0.0
consola: 3.4.2
db0: 0.3.4(better-sqlite3@12.6.2)
@@ -7526,10 +8426,9 @@ snapshots:
destr: 2.0.5
git-url-parse: 16.1.0
hookable: 5.5.3
- isomorphic-git: 1.36.3
+ isomorphic-git: 1.37.2
jiti: 2.6.1
json-schema-to-typescript: 15.0.4
- knitwork: 1.3.0
mdast-util-to-hast: 13.2.1
mdast-util-to-string: 4.0.0
micromark: 4.0.2
@@ -7539,15 +8438,15 @@ snapshots:
micromark-util-sanitize-uri: 2.0.1
micromatch: 4.0.8
minimark: 0.2.0
- minimatch: 10.1.1
- nuxt-component-meta: 0.17.1(magicast@0.5.1)
- nypm: 0.6.4
+ minimatch: 10.2.4
+ nuxt-component-meta: 0.17.2(magicast@0.5.2)
+ nypm: 0.6.5
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
remark-mdc: 3.10.0
scule: 1.3.0
- shiki: 3.22.0
+ shiki: 4.0.2
slugify: 1.6.6
socket.io-client: 4.8.3
std-env: 3.10.0
@@ -7570,60 +8469,127 @@ snapshots:
- supports-color
- utf-8-validate
+ '@nuxt/content@3.12.0(better-sqlite3@12.8.0)(magicast@0.5.2)':
+ dependencies:
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxtjs/mdc': 0.20.2(magicast@0.5.2)
+ '@shikijs/langs': 3.23.0
+ '@sqlite.org/sqlite-wasm': 3.50.4-build1
+ '@standard-schema/spec': 1.1.0
+ '@webcontainer/env': 1.1.1
+ c12: 3.3.3(magicast@0.5.2)
+ chokidar: 5.0.0
+ consola: 3.4.2
+ db0: 0.3.4(better-sqlite3@12.8.0)
+ defu: 6.1.4
+ destr: 2.0.5
+ git-url-parse: 16.1.0
+ hookable: 5.5.3
+ isomorphic-git: 1.37.2
+ jiti: 2.6.1
+ json-schema-to-typescript: 15.0.4
+ mdast-util-to-hast: 13.2.1
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.2
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromatch: 4.0.8
+ minimark: 0.2.0
+ minimatch: 10.2.4
+ nuxt-component-meta: 0.17.2(magicast@0.5.2)
+ nypm: 0.6.5
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ remark-mdc: 3.10.0
+ scule: 1.3.0
+ shiki: 4.0.2
+ slugify: 1.6.6
+ socket.io-client: 4.8.3
+ std-env: 3.10.0
+ tinyglobby: 0.2.15
+ ufo: 1.6.3
+ unctx: 2.5.0
+ unified: 11.0.5
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.1.0
+ unplugin: 2.3.11
+ zod: 3.25.76
+ zod-to-json-schema: 3.25.1(zod@3.25.76)
+ optionalDependencies:
+ better-sqlite3: 12.8.0
+ transitivePeerDependencies:
+ - bufferutil
+ - drizzle-orm
+ - magicast
+ - mysql2
+ - supports-color
+ - utf-8-validate
+
'@nuxt/devalue@2.0.2': {}
- '@nuxt/devtools-kit@3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))':
+ '@nuxt/devtools-kit@2.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))':
+ dependencies:
+ '@nuxt/kit': 3.21.2(magicast@0.5.2)
+ execa: 8.0.1
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - magicast
+
+ '@nuxt/devtools-kit@3.2.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))':
dependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
execa: 8.0.1
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
transitivePeerDependencies:
- magicast
- '@nuxt/devtools-wizard@3.1.1':
+ '@nuxt/devtools-wizard@3.2.3':
dependencies:
+ '@clack/prompts': 1.1.0
consola: 3.4.2
diff: 8.0.3
execa: 8.0.1
- magicast: 0.5.1
+ magicast: 0.5.2
pathe: 2.0.3
pkg-types: 2.3.0
- prompts: 2.4.2
- semver: 7.7.3
+ semver: 7.7.4
- '@nuxt/devtools@3.1.1(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@nuxt/devtools@3.2.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/devtools-wizard': 3.1.1
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@vue/devtools-core': 8.0.5(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
- '@vue/devtools-kit': 8.0.5
- birpc: 2.9.0
+ '@nuxt/devtools-kit': 3.2.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/devtools-wizard': 3.2.3
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@vue/devtools-core': 8.0.7(vue@3.5.30(typescript@5.9.3))
+ '@vue/devtools-kit': 8.0.7
+ birpc: 4.0.0
consola: 3.4.2
destr: 2.0.5
error-stack-parser-es: 1.0.5
execa: 8.0.1
- fast-npm-meta: 0.4.8
+ fast-npm-meta: 1.4.2
get-port-please: 3.2.0
- hookable: 5.5.3
+ hookable: 6.0.1
image-meta: 0.2.2
is-installed-globally: 1.0.0
- launch-editor: 2.12.0
+ launch-editor: 2.13.1
local-pkg: 1.1.2
- magicast: 0.5.1
- nypm: 0.6.4
+ magicast: 0.5.2
+ nypm: 0.6.5
ohash: 2.0.11
pathe: 2.0.3
perfect-debounce: 2.1.0
pkg-types: 2.3.0
- semver: 7.7.3
- simple-git: 3.30.0
+ semver: 7.7.4
+ simple-git: 3.33.0
sirv: 3.0.2
structured-clone-es: 1.0.0
tinyglobby: 0.2.15
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vite-plugin-inspect: 11.3.3(@nuxt/kit@4.3.0(magicast@0.5.1))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ vite-plugin-vue-tracer: 1.2.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
which: 5.0.0
ws: 8.19.0
transitivePeerDependencies:
@@ -7632,30 +8598,30 @@ snapshots:
- utf-8-validate
- vue
- '@nuxt/eslint-config@1.13.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@nuxt/eslint-config@1.15.2(@typescript-eslint/utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.30)(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@antfu/install-pkg': 1.1.0
- '@clack/prompts': 0.11.0
- '@eslint/js': 9.39.2
- '@nuxt/eslint-plugin': 1.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@stylistic/eslint-plugin': 5.7.1(eslint@9.39.2(jiti@2.6.1))
- '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.2(jiti@2.6.1)
- eslint-config-flat-gitignore: 2.1.0(eslint@9.39.2(jiti@2.6.1))
- eslint-flat-config-utils: 3.0.0
- eslint-merge-processors: 2.0.0(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-import-lite: 0.5.0(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-jsdoc: 62.5.0(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-regexp: 3.0.0(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-unicorn: 62.0.0(eslint@9.39.2(jiti@2.6.1))
- eslint-plugin-vue: 10.7.0(@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1)))
- eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1))
- globals: 17.3.0
+ '@clack/prompts': 1.1.0
+ '@eslint/js': 9.39.4
+ '@nuxt/eslint-plugin': 1.15.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@stylistic/eslint-plugin': 5.10.0(eslint@10.1.0(jiti@2.6.1))
+ '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 10.1.0(jiti@2.6.1)
+ eslint-config-flat-gitignore: 2.2.1(eslint@10.1.0(jiti@2.6.1))
+ eslint-flat-config-utils: 3.0.2
+ eslint-merge-processors: 2.0.0(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-import-lite: 0.5.2(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-jsdoc: 62.8.0(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-regexp: 3.1.0(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-unicorn: 63.0.0(eslint@10.1.0(jiti@2.6.1))
+ eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1)))(@typescript-eslint/parser@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1)))
+ eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.30)(eslint@10.1.0(jiti@2.6.1))
+ globals: 17.4.0
local-pkg: 1.1.2
pathe: 2.0.3
- vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@2.6.1))
+ vue-eslint-parser: 10.4.0(eslint@10.1.0(jiti@2.6.1))
transitivePeerDependencies:
- '@typescript-eslint/utils'
- '@vue/compiler-sfc'
@@ -7663,31 +8629,31 @@ snapshots:
- supports-color
- typescript
- '@nuxt/eslint-plugin@1.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@nuxt/eslint-plugin@1.15.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.54.0
- '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.39.2(jiti@2.6.1)
+ '@typescript-eslint/types': 8.57.0
+ '@typescript-eslint/utils': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 10.1.0(jiti@2.6.1)
transitivePeerDependencies:
- supports-color
- typescript
- '@nuxt/eslint@1.13.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))':
+ '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.30)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))':
dependencies:
- '@eslint/config-inspector': 1.4.2(eslint@9.39.2(jiti@2.6.1))
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/eslint-config': 1.13.0(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@nuxt/eslint-plugin': 1.13.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@eslint/config-inspector': 1.5.0(eslint@10.1.0(jiti@2.6.1))
+ '@nuxt/devtools-kit': 3.2.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.30)(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@nuxt/eslint-plugin': 1.15.2(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
chokidar: 5.0.0
- eslint: 9.39.2(jiti@2.6.1)
- eslint-flat-config-utils: 3.0.0
- eslint-typegen: 2.3.0(eslint@9.39.2(jiti@2.6.1))
+ eslint: 10.1.0(jiti@2.6.1)
+ eslint-flat-config-utils: 3.0.2
+ eslint-typegen: 2.3.1(eslint@10.1.0(jiti@2.6.1))
find-up: 8.0.0
get-port-please: 3.2.0
- mlly: 1.8.0
+ mlly: 1.8.1
pathe: 2.0.3
- unimport: 5.6.0
+ unimport: 5.7.0
transitivePeerDependencies:
- '@typescript-eslint/utils'
- '@vue/compiler-sfc'
@@ -7700,29 +8666,63 @@ snapshots:
- utf-8-validate
- vite
- '@nuxt/fonts@0.12.1(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))':
+ '@nuxt/fonts@0.14.0(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))':
dependencies:
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@nuxt/devtools-kit': 3.2.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
consola: 3.4.2
- css-tree: 3.1.0
defu: 6.1.4
- esbuild: 0.25.12
- fontaine: 0.7.0
- fontless: 0.1.0(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- h3: 1.15.5
- jiti: 2.6.1
+ fontless: 0.2.1(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ h3: 1.15.6
magic-regexp: 0.10.0
- magic-string: 0.30.21
- node-fetch-native: 1.6.7
- ohash: 2.0.11
+ ofetch: 1.5.1
pathe: 2.0.3
sirv: 3.0.2
tinyglobby: 0.2.15
ufo: 1.6.3
- unifont: 0.6.0
- unplugin: 2.3.11
- unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)
+ unifont: 0.7.4
+ unplugin: 3.0.0
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - idb-keyval
+ - ioredis
+ - magicast
+ - uploadthing
+ - vite
+
+ '@nuxt/fonts@0.14.0(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))':
+ dependencies:
+ '@nuxt/devtools-kit': 3.2.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ consola: 3.4.2
+ defu: 6.1.4
+ fontless: 0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ h3: 1.15.6
+ magic-regexp: 0.10.0
+ ofetch: 1.5.1
+ pathe: 2.0.3
+ sirv: 3.0.2
+ tinyglobby: 0.2.15
+ ufo: 1.6.3
+ unifont: 0.7.4
+ unplugin: 3.0.0
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -7746,17 +8746,17 @@ snapshots:
- uploadthing
- vite
- '@nuxt/icon@2.2.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@nuxt/icon@2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@iconify/collections': 1.0.645
+ '@iconify/collections': 1.0.659
'@iconify/types': 2.0.0
'@iconify/utils': 3.1.0
- '@iconify/vue': 5.0.0(vue@3.5.27(typescript@5.9.3))
- '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@iconify/vue': 5.0.0(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/devtools-kit': 3.2.3(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
consola: 3.4.2
local-pkg: 1.1.2
- mlly: 1.8.0
+ mlly: 1.8.1
ohash: 2.0.11
pathe: 2.0.3
picomatch: 4.0.3
@@ -7767,9 +8767,9 @@ snapshots:
- vite
- vue
- '@nuxt/kit@3.21.0(magicast@0.5.1)':
+ '@nuxt/kit@3.21.1(magicast@0.5.2)':
dependencies:
- c12: 3.3.3(magicast@0.5.1)
+ c12: 3.3.3(magicast@0.5.2)
consola: 3.4.2
defu: 6.1.4
destr: 2.0.5
@@ -7779,13 +8779,13 @@ snapshots:
jiti: 2.6.1
klona: 2.0.6
knitwork: 1.3.0
- mlly: 1.8.0
+ mlly: 1.8.1
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
- rc9: 2.1.2
+ rc9: 3.0.0
scule: 1.3.0
- semver: 7.7.3
+ semver: 7.7.4
tinyglobby: 0.2.15
ufo: 1.6.3
unctx: 2.5.0
@@ -7793,9 +8793,9 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/kit@4.3.0(magicast@0.5.1)':
+ '@nuxt/kit@3.21.2(magicast@0.5.2)':
dependencies:
- c12: 3.3.3(magicast@0.5.1)
+ c12: 3.3.3(magicast@0.5.2)
consola: 3.4.2
defu: 6.1.4
destr: 2.0.5
@@ -7804,13 +8804,64 @@ snapshots:
ignore: 7.0.5
jiti: 2.6.1
klona: 2.0.6
- mlly: 1.8.0
+ knitwork: 1.3.0
+ mlly: 1.8.1
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
- rc9: 2.1.2
+ rc9: 3.0.0
+ scule: 1.3.0
+ semver: 7.7.4
+ tinyglobby: 0.2.15
+ ufo: 1.6.3
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
+
+ '@nuxt/kit@4.3.1(magicast@0.5.2)':
+ dependencies:
+ c12: 3.3.3(magicast@0.5.2)
+ consola: 3.4.2
+ defu: 6.1.4
+ destr: 2.0.5
+ errx: 0.1.0
+ exsolve: 1.0.8
+ ignore: 7.0.5
+ jiti: 2.6.1
+ klona: 2.0.6
+ mlly: 1.8.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ rc9: 3.0.0
+ scule: 1.3.0
+ semver: 7.7.4
+ tinyglobby: 0.2.15
+ ufo: 1.6.3
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
+
+ '@nuxt/kit@4.4.2(magicast@0.5.2)':
+ dependencies:
+ c12: 3.3.3(magicast@0.5.2)
+ consola: 3.4.2
+ defu: 6.1.4
+ destr: 2.0.5
+ errx: 0.1.0
+ exsolve: 1.0.8
+ ignore: 7.0.5
+ jiti: 2.6.1
+ klona: 2.0.6
+ mlly: 1.8.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ rc9: 3.0.0
scule: 1.3.0
- semver: 7.7.3
+ semver: 7.7.4
tinyglobby: 0.2.15
ufo: 1.6.3
unctx: 2.5.0
@@ -7818,25 +8869,25 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/nitro-server@4.3.0(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)':
+ '@nuxt/nitro-server@4.3.1(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)':
dependencies:
'@nuxt/devalue': 2.0.2
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@unhead/vue': 2.1.2(vue@3.5.27(typescript@5.9.3))
- '@vue/shared': 3.5.27
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@unhead/vue': 2.1.12(vue@3.5.30(typescript@5.9.3))
+ '@vue/shared': 3.5.30
consola: 3.4.2
defu: 6.1.4
destr: 2.0.5
- devalue: 5.6.2
+ devalue: 5.6.3
errx: 0.1.0
escape-string-regexp: 5.0.0
exsolve: 1.0.8
- h3: 1.15.5
- impound: 1.0.0
+ h3: 1.15.6
+ impound: 1.1.5
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.13.1(better-sqlite3@12.6.2)
- nuxt: 4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
ohash: 2.0.11
pathe: 2.0.3
pkg-types: 2.3.0
@@ -7844,8 +8895,76 @@ snapshots:
std-env: 3.10.0
ufo: 1.6.3
unctx: 2.5.0
- unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)
- vue: 3.5.27(typescript@5.9.3)
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)
+ vue: 3.5.30(typescript@5.9.3)
+ vue-bundle-renderer: 2.2.0
+ vue-devtools-stub: 0.1.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - db0
+ - drizzle-orm
+ - encoding
+ - idb-keyval
+ - ioredis
+ - magicast
+ - mysql2
+ - react-native-b4a
+ - rolldown
+ - sqlite3
+ - supports-color
+ - typescript
+ - uploadthing
+ - xml2js
+
+ '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)':
+ dependencies:
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ '@nuxt/devalue': 2.0.2
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@unhead/vue': 2.1.12(vue@3.5.30(typescript@5.9.3))
+ '@vue/shared': 3.5.30
+ consola: 3.4.2
+ defu: 6.1.4
+ destr: 2.0.5
+ devalue: 5.6.4
+ errx: 0.1.0
+ escape-string-regexp: 5.0.0
+ exsolve: 1.0.8
+ h3: 1.15.6
+ impound: 1.1.5
+ klona: 2.0.6
+ mocked-exports: 0.1.1
+ nitropack: 2.13.1(better-sqlite3@12.8.0)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nypm: 0.6.5
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ rou3: 0.8.1
+ std-env: 4.0.0
+ ufo: 1.6.3
+ unctx: 2.5.0
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)
+ vue: 3.5.30(typescript@5.9.3)
vue-bundle-renderer: 2.2.0
vue-devtools-stub: 0.1.0
transitivePeerDependencies:
@@ -7855,6 +8974,7 @@ snapshots:
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
+ - '@babel/core'
- '@capacitor/preferences'
- '@deno/kv'
- '@electric-sql/pglite'
@@ -7867,6 +8987,7 @@ snapshots:
- '@vercel/kv'
- aws4fetch
- bare-abort-controller
+ - bare-buffer
- better-sqlite3
- db0
- drizzle-orm
@@ -7883,36 +9004,46 @@ snapshots:
- uploadthing
- xml2js
- '@nuxt/schema@4.3.0':
+ '@nuxt/schema@4.3.1':
dependencies:
- '@vue/shared': 3.5.27
+ '@vue/shared': 3.5.30
defu: 6.1.4
pathe: 2.0.3
pkg-types: 2.3.0
std-env: 3.10.0
- '@nuxt/telemetry@2.6.6(magicast@0.5.1)':
+ '@nuxt/schema@4.4.2':
dependencies:
- '@nuxt/kit': 3.21.0(magicast@0.5.1)
- citty: 0.1.6
- consola: 3.4.2
- destr: 2.0.5
- dotenv: 16.6.1
- git-url-parse: 16.1.0
- is-docker: 3.0.0
- ofetch: 1.5.1
- package-manager-detector: 1.6.0
+ '@vue/shared': 3.5.30
+ defu: 6.1.4
pathe: 2.0.3
- rc9: 2.1.2
+ pkg-types: 2.3.0
+ std-env: 4.0.0
+
+ '@nuxt/telemetry@2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2))':
+ dependencies:
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ citty: 0.2.1
+ consola: 3.4.2
+ ofetch: 2.0.0-alpha.3
+ rc9: 3.0.0
std-env: 3.10.0
- transitivePeerDependencies:
- - magicast
- '@nuxt/test-utils@3.23.0(magicast@0.5.1)(typescript@5.9.3)':
+ '@nuxt/telemetry@2.7.0(@nuxt/kit@4.4.2(magicast@0.5.2))':
dependencies:
- '@clack/prompts': 1.0.0-alpha.9
- '@nuxt/kit': 3.21.0(magicast@0.5.1)
- c12: 3.3.3(magicast@0.5.1)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ citty: 0.2.1
+ consola: 3.4.2
+ ofetch: 2.0.0-alpha.3
+ rc9: 3.0.0
+ std-env: 3.10.0
+
+ '@nuxt/test-utils@4.0.0(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))':
+ dependencies:
+ '@clack/prompts': 1.0.0
+ '@nuxt/devtools-kit': 2.7.0(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/kit': 3.21.2(magicast@0.5.2)
+ c12: 3.3.3(magicast@0.5.2)
consola: 3.4.2
defu: 6.1.4
destr: 2.0.5
@@ -7920,66 +9051,67 @@ snapshots:
exsolve: 1.0.8
fake-indexeddb: 6.2.5
get-port-please: 3.2.0
- h3: 1.15.5
+ h3: 1.15.6
h3-next: h3@2.0.1-rc.11
local-pkg: 1.1.2
magic-string: 0.30.21
node-fetch-native: 1.6.7
node-mock-http: 1.0.4
- nypm: 0.6.4
+ nypm: 0.6.5
ofetch: 1.5.1
pathe: 2.0.3
perfect-debounce: 2.1.0
radix3: 1.1.2
scule: 1.3.0
std-env: 3.10.0
- tinyexec: 1.0.2
+ tinyexec: 1.0.4
ufo: 1.6.3
- unplugin: 2.3.11
- vitest-environment-nuxt: 1.0.1(magicast@0.5.1)(typescript@5.9.3)
- vue: 3.5.27(typescript@5.9.3)
+ unplugin: 3.0.0
+ vitest-environment-nuxt: 1.0.1(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ vue: 3.5.30(typescript@5.9.3)
transitivePeerDependencies:
- crossws
- magicast
- typescript
+ - vite
- '@nuxt/ui@4.4.0(@nuxt/content@3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1))(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(ioredis@5.9.2)(magicast@0.5.1)(tailwindcss@4.1.18)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))(yjs@13.6.28)(zod@3.25.76)':
+ '@nuxt/ui@4.5.1(@nuxt/content@3.12.0(better-sqlite3@12.6.2)(magicast@0.5.2))(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.6.2))(embla-carousel@8.6.0)(ioredis@5.10.0)(magicast@0.5.2)(tailwindcss@4.2.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))(yjs@13.6.28)(zod@3.25.76)':
dependencies:
- '@floating-ui/dom': 1.7.5
- '@iconify/vue': 5.0.0(vue@3.5.27(typescript@5.9.3))
- '@internationalized/date': 3.10.1
+ '@floating-ui/dom': 1.7.6
+ '@iconify/vue': 5.0.0(vue@3.5.30(typescript@5.9.3))
+ '@internationalized/date': 3.12.0
'@internationalized/number': 3.6.5
- '@nuxt/fonts': 0.12.1(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- '@nuxt/icon': 2.2.1(magicast@0.5.1)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@nuxt/schema': 4.3.0
- '@nuxtjs/color-mode': 3.5.2(magicast@0.5.1)
+ '@nuxt/fonts': 0.14.0(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxt/schema': 4.3.1
+ '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2)
'@standard-schema/spec': 1.1.0
- '@tailwindcss/postcss': 4.1.18
- '@tailwindcss/vite': 4.1.18(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- '@tanstack/vue-table': 8.21.3(vue@3.5.27(typescript@5.9.3))
- '@tanstack/vue-virtual': 3.13.18(vue@3.5.27(typescript@5.9.3))
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/extension-bubble-menu': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-code': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-collaboration': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28)
- '@tiptap/extension-drag-handle': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))
- '@tiptap/extension-drag-handle-vue-3': 3.18.0(@tiptap/extension-drag-handle@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)))(@tiptap/pm@3.18.0)(@tiptap/vue-3@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
- '@tiptap/extension-floating-menu': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-horizontal-rule': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-image': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-mention': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/suggestion@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/extension-node-range': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-placeholder': 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/markdown': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
- '@tiptap/starter-kit': 3.18.0
- '@tiptap/suggestion': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/vue-3': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.27(typescript@5.9.3))
- '@unhead/vue': 2.1.2(vue@3.5.27(typescript@5.9.3))
- '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3))
- '@vueuse/integrations': 14.2.0(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.27(typescript@5.9.3))
- '@vueuse/shared': 14.2.0(vue@3.5.27(typescript@5.9.3))
+ '@tailwindcss/postcss': 4.2.1
+ '@tailwindcss/vite': 4.2.1(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@tanstack/vue-table': 8.21.3(vue@3.5.30(typescript@5.9.3))
+ '@tanstack/vue-virtual': 3.13.21(vue@3.5.30(typescript@5.9.3))
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/extension-bubble-menu': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-code': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-collaboration': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28)
+ '@tiptap/extension-drag-handle': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))
+ '@tiptap/extension-drag-handle-vue-3': 3.20.1(@tiptap/extension-drag-handle@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)))(@tiptap/pm@3.20.1)(@tiptap/vue-3@3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ '@tiptap/extension-floating-menu': 3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-horizontal-rule': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-image': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-mention': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/suggestion@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-node-range': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-placeholder': 3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/markdown': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+ '@tiptap/starter-kit': 3.20.1
+ '@tiptap/suggestion': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/vue-3': 3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(vue@3.5.30(typescript@5.9.3))
+ '@unhead/vue': 2.1.12(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/integrations': 14.2.1(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
colortranslator: 5.0.0
consola: 3.4.2
defu: 6.1.4
@@ -7988,32 +9120,146 @@ snapshots:
embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0)
embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0)
embla-carousel-fade: 8.6.0(embla-carousel@8.6.0)
- embla-carousel-vue: 8.6.0(vue@3.5.27(typescript@5.9.3))
+ embla-carousel-vue: 8.6.0(vue@3.5.30(typescript@5.9.3))
embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0)
fuse.js: 7.1.0
hookable: 5.5.3
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
- motion-v: 1.10.2(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
+ mlly: 1.8.1
+ motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
ohash: 2.0.11
pathe: 2.0.3
- reka-ui: 2.7.0(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
+ reka-ui: 2.8.2(vue@3.5.30(typescript@5.9.3))
scule: 1.3.0
- tailwind-merge: 3.4.0
- tailwind-variants: 3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18)
- tailwindcss: 4.1.18
+ tailwind-merge: 3.5.0
+ tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.1)
+ tailwindcss: 4.2.1
tinyglobby: 0.2.15
typescript: 5.9.3
ufo: 1.6.3
- unplugin: 2.3.11
- unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3)))
- unplugin-vue-components: 31.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(vue@3.5.27(typescript@5.9.3))
- vaul-vue: 0.4.1(reka-ui@2.7.0(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
- vue-component-type-helpers: 3.2.4
+ unplugin: 3.0.0
+ unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))
+ unplugin-vue-components: 31.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.30(typescript@5.9.3))
+ vaul-vue: 0.4.1(reka-ui@2.8.2(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ vue-component-type-helpers: 3.2.5
+ optionalDependencies:
+ '@nuxt/content': 3.12.0(better-sqlite3@12.6.2)(magicast@0.5.2)
+ vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@emotion/is-prop-valid'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@tiptap/extensions'
+ - '@tiptap/y-tiptap'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vue/composition-api'
+ - async-validator
+ - aws4fetch
+ - axios
+ - change-case
+ - db0
+ - drauu
+ - embla-carousel
+ - focus-trap
+ - idb-keyval
+ - ioredis
+ - jwt-decode
+ - magicast
+ - nprogress
+ - qrcode
+ - react
+ - react-dom
+ - sortablejs
+ - universal-cookie
+ - uploadthing
+ - vite
+ - vue
+ - yjs
+
+ '@nuxt/ui@4.5.1(@nuxt/content@3.12.0(better-sqlite3@12.8.0)(magicast@0.5.2))(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(change-case@5.4.4)(db0@0.3.4(better-sqlite3@12.8.0))(embla-carousel@8.6.0)(ioredis@5.10.0)(magicast@0.5.2)(tailwindcss@4.2.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))(yjs@13.6.28)(zod@3.25.76)':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@iconify/vue': 5.0.0(vue@3.5.30(typescript@5.9.3))
+ '@internationalized/date': 3.12.0
+ '@internationalized/number': 3.6.5
+ '@nuxt/fonts': 0.14.0(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxt/schema': 4.3.1
+ '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2)
+ '@standard-schema/spec': 1.1.0
+ '@tailwindcss/postcss': 4.2.1
+ '@tailwindcss/vite': 4.2.1(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
+ '@tanstack/vue-table': 8.21.3(vue@3.5.30(typescript@5.9.3))
+ '@tanstack/vue-virtual': 3.13.21(vue@3.5.30(typescript@5.9.3))
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/extension-bubble-menu': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-code': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-collaboration': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28)
+ '@tiptap/extension-drag-handle': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))
+ '@tiptap/extension-drag-handle-vue-3': 3.20.1(@tiptap/extension-drag-handle@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)))(@tiptap/pm@3.20.1)(@tiptap/vue-3@3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ '@tiptap/extension-floating-menu': 3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-horizontal-rule': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-image': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-mention': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/suggestion@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-node-range': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-placeholder': 3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/markdown': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+ '@tiptap/starter-kit': 3.20.1
+ '@tiptap/suggestion': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/vue-3': 3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(vue@3.5.30(typescript@5.9.3))
+ '@unhead/vue': 2.1.12(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/integrations': 14.2.1(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ colortranslator: 5.0.0
+ consola: 3.4.2
+ defu: 6.1.4
+ embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-fade: 8.6.0(embla-carousel@8.6.0)
+ embla-carousel-vue: 8.6.0(vue@3.5.30(typescript@5.9.3))
+ embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0)
+ fuse.js: 7.1.0
+ hookable: 5.5.3
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.1
+ motion-v: 1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ ohash: 2.0.11
+ pathe: 2.0.3
+ reka-ui: 2.8.2(vue@3.5.30(typescript@5.9.3))
+ scule: 1.3.0
+ tailwind-merge: 3.5.0
+ tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.1)
+ tailwindcss: 4.2.1
+ tinyglobby: 0.2.15
+ typescript: 5.9.3
+ ufo: 1.6.3
+ unplugin: 3.0.0
+ unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))
+ unplugin-vue-components: 31.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.30(typescript@5.9.3))
+ vaul-vue: 0.4.1(reka-ui@2.8.2(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ vue-component-type-helpers: 3.2.5
optionalDependencies:
- '@nuxt/content': 3.11.0(better-sqlite3@12.6.2)(magicast@0.5.1)
- vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3))
+ '@nuxt/content': 3.12.0(better-sqlite3@12.8.0)(magicast@0.5.2)
+ vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
zod: 3.25.76
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -8057,39 +9303,99 @@ snapshots:
- vue
- yjs
- '@nuxt/vite-builder@4.3.0(@types/node@25.2.0)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.27(typescript@5.9.3))(yaml@2.8.2)':
+ '@nuxt/vite-builder@4.3.1(@types/node@25.2.0)(eslint@10.1.0(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)':
dependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@rollup/plugin-replace': 6.0.3(rollup@4.57.1)
- '@vitejs/plugin-vue': 6.0.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
- '@vitejs/plugin-vue-jsx': 5.1.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
- autoprefixer: 10.4.24(postcss@8.5.6)
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.59.0)
+ '@vitejs/plugin-vue': 6.0.4(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@vitejs/plugin-vue-jsx': 5.1.4(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ autoprefixer: 10.4.27(postcss@8.5.8)
consola: 3.4.2
- cssnano: 7.1.2(postcss@8.5.6)
+ cssnano: 7.1.3(postcss@8.5.8)
defu: 6.1.4
- esbuild: 0.27.2
+ esbuild: 0.27.3
escape-string-regexp: 5.0.0
exsolve: 1.0.8
get-port-please: 3.2.0
jiti: 2.6.1
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
mocked-exports: 0.1.1
- nuxt: 4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
pathe: 2.0.3
pkg-types: 2.3.0
- postcss: 8.5.6
- rollup-plugin-visualizer: 6.0.5(rollup@4.57.1)
- seroval: 1.5.0
+ postcss: 8.5.8
+ rollup-plugin-visualizer: 6.0.11(rollup@4.59.0)
+ seroval: 1.5.1
std-env: 3.10.0
ufo: 1.6.3
unenv: 2.0.0-rc.24
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vite-node: 5.3.0(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))
- vue: 3.5.27(typescript@5.9.3)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vite-node: 5.3.0(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vite-plugin-checker: 0.12.0(eslint@10.1.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))
+ vue: 3.5.30(typescript@5.9.3)
+ vue-bundle-renderer: 2.2.0
+ transitivePeerDependencies:
+ - '@biomejs/biome'
+ - '@types/node'
+ - eslint
+ - less
+ - lightningcss
+ - magicast
+ - meow
+ - optionator
+ - oxlint
+ - rollup
+ - sass
+ - sass-embedded
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - vls
+ - vti
+ - vue-tsc
+ - yaml
+
+ '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.2.0)(eslint@10.1.0(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)':
+ dependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.59.0)
+ '@vitejs/plugin-vue': 6.0.5(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ autoprefixer: 10.4.27(postcss@8.5.8)
+ consola: 3.4.2
+ cssnano: 7.1.3(postcss@8.5.8)
+ defu: 6.1.4
+ escape-string-regexp: 5.0.0
+ exsolve: 1.0.8
+ get-port-please: 3.2.0
+ jiti: 2.6.1
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.1
+ mocked-exports: 0.1.1
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ nypm: 0.6.5
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ postcss: 8.5.8
+ seroval: 1.5.1
+ std-env: 4.0.0
+ ufo: 1.6.3
+ unenv: 2.0.0-rc.24
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vite-node: 5.3.0(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vite-plugin-checker: 0.12.0(eslint@10.1.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))
+ vue: 3.5.30(typescript@5.9.3)
vue-bundle-renderer: 2.2.0
+ optionalDependencies:
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ rollup-plugin-visualizer: 6.0.11(rollup@4.59.0)
transitivePeerDependencies:
- '@biomejs/biome'
- '@types/node'
@@ -8115,32 +9421,32 @@ snapshots:
- vue-tsc
- yaml
- '@nuxtjs/color-mode@3.5.2(magicast@0.5.1)':
+ '@nuxtjs/color-mode@3.5.2(magicast@0.5.2)':
dependencies:
- '@nuxt/kit': 3.21.0(magicast@0.5.1)
+ '@nuxt/kit': 3.21.1(magicast@0.5.2)
pathe: 1.1.2
pkg-types: 1.3.1
- semver: 7.7.3
+ semver: 7.7.4
transitivePeerDependencies:
- magicast
- '@nuxtjs/i18n@10.2.1(@vue/compiler-dom@3.5.27)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(rollup@4.57.1)(vue@3.5.27(typescript@5.9.3))':
+ '@nuxtjs/i18n@10.2.3(@vue/compiler-dom@3.5.30)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(magicast@0.5.2)(rollup@4.59.0)(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@intlify/core': 11.2.8
+ '@intlify/core': 11.3.0
'@intlify/h3': 0.7.4
- '@intlify/shared': 11.2.8
- '@intlify/unplugin-vue-i18n': 11.0.3(@vue/compiler-dom@3.5.27)(eslint@9.39.2(jiti@2.6.1))(rollup@4.57.1)(typescript@5.9.3)(vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
+ '@intlify/shared': 11.3.0
+ '@intlify/unplugin-vue-i18n': 11.0.7(@vue/compiler-dom@3.5.30)(eslint@10.1.0(jiti@2.6.1))(rollup@4.59.0)(typescript@5.9.3)(vue-i18n@11.3.0(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
'@intlify/utils': 0.13.0
- '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.57.1)
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@rollup/plugin-yaml': 4.1.2(rollup@4.57.1)
- '@vue/compiler-sfc': 3.5.27
+ '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.59.0)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@rollup/plugin-yaml': 4.1.2(rollup@4.59.0)
+ '@vue/compiler-sfc': 3.5.30
defu: 6.1.4
- devalue: 5.6.2
- h3: 1.15.5
+ devalue: 5.6.4
+ h3: 1.15.6
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
nuxt-define: 1.0.0
ohash: 2.0.11
oxc-parser: 0.95.0
@@ -8150,10 +9456,10 @@ snapshots:
typescript: 5.9.3
ufo: 1.6.3
unplugin: 2.3.11
- unplugin-vue-router: 0.16.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
- unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)
- vue-i18n: 11.2.8(vue@3.5.27(typescript@5.9.3))
- vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3))
+ unplugin-vue-router: 0.16.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)
+ vue-i18n: 11.3.0(vue@3.5.30(typescript@5.9.3))
+ vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -8182,16 +9488,16 @@ snapshots:
- uploadthing
- vue
- '@nuxtjs/mdc@0.20.0(magicast@0.5.1)':
+ '@nuxtjs/mdc@0.20.2(magicast@0.5.2)':
dependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@shikijs/core': 3.22.0
- '@shikijs/langs': 3.22.0
- '@shikijs/themes': 3.22.0
- '@shikijs/transformers': 3.22.0
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@shikijs/core': 3.23.0
+ '@shikijs/langs': 3.23.0
+ '@shikijs/themes': 3.23.0
+ '@shikijs/transformers': 3.23.0
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
- '@vue/compiler-core': 3.5.27
+ '@vue/compiler-core': 3.5.30
consola: 3.4.2
debug: 4.4.3
defu: 6.1.4
@@ -8220,7 +9526,7 @@ snapshots:
remark-rehype: 11.1.2
remark-stringify: 11.0.0
scule: 1.3.0
- shiki: 3.22.0
+ shiki: 3.23.0
ufo: 1.6.3
unified: 11.0.5
unist-builder: 4.0.0
@@ -8231,153 +9537,268 @@ snapshots:
- magicast
- supports-color
- '@oxc-minify/binding-android-arm-eabi@0.110.0':
+ '@oxc-minify/binding-android-arm-eabi@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-android-arm-eabi@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-android-arm64@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-android-arm64@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-arm64@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-arm64@0.117.0':
optional: true
- '@oxc-minify/binding-android-arm64@0.110.0':
+ '@oxc-minify/binding-darwin-x64@0.112.0':
optional: true
- '@oxc-minify/binding-darwin-arm64@0.110.0':
+ '@oxc-minify/binding-darwin-x64@0.117.0':
optional: true
- '@oxc-minify/binding-darwin-x64@0.110.0':
+ '@oxc-minify/binding-freebsd-x64@0.112.0':
optional: true
- '@oxc-minify/binding-freebsd-x64@0.110.0':
+ '@oxc-minify/binding-freebsd-x64@0.117.0':
optional: true
- '@oxc-minify/binding-linux-arm-gnueabihf@0.110.0':
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.112.0':
optional: true
- '@oxc-minify/binding-linux-arm-musleabihf@0.110.0':
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
optional: true
- '@oxc-minify/binding-linux-arm64-gnu@0.110.0':
+ '@oxc-minify/binding-linux-arm-musleabihf@0.112.0':
optional: true
- '@oxc-minify/binding-linux-arm64-musl@0.110.0':
+ '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
optional: true
- '@oxc-minify/binding-linux-ppc64-gnu@0.110.0':
+ '@oxc-minify/binding-linux-arm64-gnu@0.112.0':
optional: true
- '@oxc-minify/binding-linux-riscv64-gnu@0.110.0':
+ '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
optional: true
- '@oxc-minify/binding-linux-riscv64-musl@0.110.0':
+ '@oxc-minify/binding-linux-arm64-musl@0.112.0':
optional: true
- '@oxc-minify/binding-linux-s390x-gnu@0.110.0':
+ '@oxc-minify/binding-linux-arm64-musl@0.117.0':
optional: true
- '@oxc-minify/binding-linux-x64-gnu@0.110.0':
+ '@oxc-minify/binding-linux-ppc64-gnu@0.112.0':
optional: true
- '@oxc-minify/binding-linux-x64-musl@0.110.0':
+ '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
optional: true
- '@oxc-minify/binding-openharmony-arm64@0.110.0':
+ '@oxc-minify/binding-linux-riscv64-gnu@0.112.0':
optional: true
- '@oxc-minify/binding-wasm32-wasi@0.110.0':
+ '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-riscv64-musl@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-musl@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-musl@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-openharmony-arm64@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-wasm32-wasi@0.112.0':
dependencies:
'@napi-rs/wasm-runtime': 1.1.1
optional: true
- '@oxc-minify/binding-win32-arm64-msvc@0.110.0':
+ '@oxc-minify/binding-wasm32-wasi@0.117.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.112.0':
+ optional: true
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-win32-ia32-msvc@0.112.0':
optional: true
- '@oxc-minify/binding-win32-ia32-msvc@0.110.0':
+ '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
optional: true
- '@oxc-minify/binding-win32-x64-msvc@0.110.0':
+ '@oxc-minify/binding-win32-x64-msvc@0.112.0':
optional: true
- '@oxc-parser/binding-android-arm-eabi@0.110.0':
+ '@oxc-minify/binding-win32-x64-msvc@0.117.0':
optional: true
- '@oxc-parser/binding-android-arm64@0.110.0':
+ '@oxc-parser/binding-android-arm-eabi@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm-eabi@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm64@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm64@0.117.0':
optional: true
'@oxc-parser/binding-android-arm64@0.95.0':
optional: true
- '@oxc-parser/binding-darwin-arm64@0.110.0':
+ '@oxc-parser/binding-darwin-arm64@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-arm64@0.117.0':
optional: true
'@oxc-parser/binding-darwin-arm64@0.95.0':
optional: true
- '@oxc-parser/binding-darwin-x64@0.110.0':
+ '@oxc-parser/binding-darwin-x64@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-x64@0.117.0':
optional: true
'@oxc-parser/binding-darwin-x64@0.95.0':
optional: true
- '@oxc-parser/binding-freebsd-x64@0.110.0':
+ '@oxc-parser/binding-freebsd-x64@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-freebsd-x64@0.117.0':
optional: true
'@oxc-parser/binding-freebsd-x64@0.95.0':
optional: true
- '@oxc-parser/binding-linux-arm-gnueabihf@0.110.0':
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
optional: true
'@oxc-parser/binding-linux-arm-gnueabihf@0.95.0':
optional: true
- '@oxc-parser/binding-linux-arm-musleabihf@0.110.0':
+ '@oxc-parser/binding-linux-arm-musleabihf@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
optional: true
'@oxc-parser/binding-linux-arm-musleabihf@0.95.0':
optional: true
- '@oxc-parser/binding-linux-arm64-gnu@0.110.0':
+ '@oxc-parser/binding-linux-arm64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
optional: true
'@oxc-parser/binding-linux-arm64-gnu@0.95.0':
optional: true
- '@oxc-parser/binding-linux-arm64-musl@0.110.0':
+ '@oxc-parser/binding-linux-arm64-musl@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.117.0':
optional: true
'@oxc-parser/binding-linux-arm64-musl@0.95.0':
optional: true
- '@oxc-parser/binding-linux-ppc64-gnu@0.110.0':
+ '@oxc-parser/binding-linux-ppc64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
optional: true
- '@oxc-parser/binding-linux-riscv64-gnu@0.110.0':
+ '@oxc-parser/binding-linux-riscv64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
optional: true
'@oxc-parser/binding-linux-riscv64-gnu@0.95.0':
optional: true
- '@oxc-parser/binding-linux-riscv64-musl@0.110.0':
+ '@oxc-parser/binding-linux-riscv64-musl@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
optional: true
- '@oxc-parser/binding-linux-s390x-gnu@0.110.0':
+ '@oxc-parser/binding-linux-s390x-gnu@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
optional: true
'@oxc-parser/binding-linux-s390x-gnu@0.95.0':
optional: true
- '@oxc-parser/binding-linux-x64-gnu@0.110.0':
+ '@oxc-parser/binding-linux-x64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.117.0':
optional: true
'@oxc-parser/binding-linux-x64-gnu@0.95.0':
optional: true
- '@oxc-parser/binding-linux-x64-musl@0.110.0':
+ '@oxc-parser/binding-linux-x64-musl@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.117.0':
optional: true
'@oxc-parser/binding-linux-x64-musl@0.95.0':
optional: true
- '@oxc-parser/binding-openharmony-arm64@0.110.0':
+ '@oxc-parser/binding-openharmony-arm64@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.112.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
optional: true
- '@oxc-parser/binding-wasm32-wasi@0.110.0':
+ '@oxc-parser/binding-wasm32-wasi@0.117.0':
dependencies:
'@napi-rs/wasm-runtime': 1.1.1
optional: true
@@ -8387,134 +9808,209 @@ snapshots:
'@napi-rs/wasm-runtime': 1.1.1
optional: true
- '@oxc-parser/binding-win32-arm64-msvc@0.110.0':
+ '@oxc-parser/binding-win32-arm64-msvc@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
optional: true
'@oxc-parser/binding-win32-arm64-msvc@0.95.0':
optional: true
- '@oxc-parser/binding-win32-ia32-msvc@0.110.0':
+ '@oxc-parser/binding-win32-ia32-msvc@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
optional: true
- '@oxc-parser/binding-win32-x64-msvc@0.110.0':
+ '@oxc-parser/binding-win32-x64-msvc@0.112.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-x64-msvc@0.117.0':
optional: true
'@oxc-parser/binding-win32-x64-msvc@0.95.0':
optional: true
- '@oxc-project/types@0.110.0': {}
+ '@oxc-project/types@0.112.0': {}
+
+ '@oxc-project/types@0.117.0': {}
'@oxc-project/types@0.95.0': {}
- '@oxc-transform/binding-android-arm-eabi@0.110.0':
+ '@oxc-transform/binding-android-arm-eabi@0.112.0':
optional: true
- '@oxc-transform/binding-android-arm64@0.110.0':
+ '@oxc-transform/binding-android-arm-eabi@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-android-arm64@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-android-arm64@0.117.0':
optional: true
'@oxc-transform/binding-android-arm64@0.95.0':
optional: true
- '@oxc-transform/binding-darwin-arm64@0.110.0':
+ '@oxc-transform/binding-darwin-arm64@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-darwin-arm64@0.117.0':
optional: true
'@oxc-transform/binding-darwin-arm64@0.95.0':
optional: true
- '@oxc-transform/binding-darwin-x64@0.110.0':
+ '@oxc-transform/binding-darwin-x64@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-darwin-x64@0.117.0':
optional: true
'@oxc-transform/binding-darwin-x64@0.95.0':
optional: true
- '@oxc-transform/binding-freebsd-x64@0.110.0':
+ '@oxc-transform/binding-freebsd-x64@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-freebsd-x64@0.117.0':
optional: true
'@oxc-transform/binding-freebsd-x64@0.95.0':
optional: true
- '@oxc-transform/binding-linux-arm-gnueabihf@0.110.0':
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
optional: true
'@oxc-transform/binding-linux-arm-gnueabihf@0.95.0':
optional: true
- '@oxc-transform/binding-linux-arm-musleabihf@0.110.0':
+ '@oxc-transform/binding-linux-arm-musleabihf@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
optional: true
'@oxc-transform/binding-linux-arm-musleabihf@0.95.0':
optional: true
- '@oxc-transform/binding-linux-arm64-gnu@0.110.0':
+ '@oxc-transform/binding-linux-arm64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
optional: true
'@oxc-transform/binding-linux-arm64-gnu@0.95.0':
optional: true
- '@oxc-transform/binding-linux-arm64-musl@0.110.0':
+ '@oxc-transform/binding-linux-arm64-musl@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm64-musl@0.117.0':
optional: true
'@oxc-transform/binding-linux-arm64-musl@0.95.0':
optional: true
- '@oxc-transform/binding-linux-ppc64-gnu@0.110.0':
+ '@oxc-transform/binding-linux-ppc64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-riscv64-gnu@0.112.0':
optional: true
- '@oxc-transform/binding-linux-riscv64-gnu@0.110.0':
+ '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
optional: true
'@oxc-transform/binding-linux-riscv64-gnu@0.95.0':
optional: true
- '@oxc-transform/binding-linux-riscv64-musl@0.110.0':
+ '@oxc-transform/binding-linux-riscv64-musl@0.112.0':
optional: true
- '@oxc-transform/binding-linux-s390x-gnu@0.110.0':
+ '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-s390x-gnu@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
optional: true
'@oxc-transform/binding-linux-s390x-gnu@0.95.0':
optional: true
- '@oxc-transform/binding-linux-x64-gnu@0.110.0':
+ '@oxc-transform/binding-linux-x64-gnu@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-x64-gnu@0.117.0':
optional: true
'@oxc-transform/binding-linux-x64-gnu@0.95.0':
optional: true
- '@oxc-transform/binding-linux-x64-musl@0.110.0':
+ '@oxc-transform/binding-linux-x64-musl@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-x64-musl@0.117.0':
optional: true
'@oxc-transform/binding-linux-x64-musl@0.95.0':
optional: true
- '@oxc-transform/binding-openharmony-arm64@0.110.0':
+ '@oxc-transform/binding-openharmony-arm64@0.112.0':
optional: true
- '@oxc-transform/binding-wasm32-wasi@0.110.0':
+ '@oxc-transform/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-wasm32-wasi@0.112.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@oxc-transform/binding-wasm32-wasi@0.117.0':
dependencies:
'@napi-rs/wasm-runtime': 1.1.1
optional: true
- '@oxc-transform/binding-wasm32-wasi@0.95.0':
- dependencies:
- '@napi-rs/wasm-runtime': 1.1.1
+ '@oxc-transform/binding-wasm32-wasi@0.95.0':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.1
+ optional: true
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.112.0':
+ optional: true
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.95.0':
optional: true
- '@oxc-transform/binding-win32-arm64-msvc@0.110.0':
+ '@oxc-transform/binding-win32-ia32-msvc@0.112.0':
optional: true
- '@oxc-transform/binding-win32-arm64-msvc@0.95.0':
+ '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
optional: true
- '@oxc-transform/binding-win32-ia32-msvc@0.110.0':
+ '@oxc-transform/binding-win32-x64-msvc@0.112.0':
optional: true
- '@oxc-transform/binding-win32-x64-msvc@0.110.0':
+ '@oxc-transform/binding-win32-x64-msvc@0.117.0':
optional: true
'@oxc-transform/binding-win32-x64-msvc@0.95.0':
optional: true
+ '@package-json/types@0.0.12': {}
+
'@parcel/watcher-android-arm64@2.5.6':
optional: true
@@ -8580,10 +10076,10 @@ snapshots:
'@parcel/watcher-win32-ia32': 2.5.6
'@parcel/watcher-win32-x64': 2.5.6
- '@pinia/nuxt@0.11.3(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)))':
+ '@pinia/nuxt@0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))':
dependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- pinia: 3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ pinia: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- magicast
@@ -8596,7 +10092,7 @@ snapshots:
dependencies:
kleur: 4.1.5
- '@poppinss/dumper@0.6.5':
+ '@poppinss/dumper@0.7.0':
dependencies:
'@poppinss/colors': 4.1.6
'@sindresorhus/is': 7.2.0
@@ -8606,17 +10102,19 @@ snapshots:
'@remirror/core-constants@3.0.0': {}
- '@rolldown/pluginutils@1.0.0-beta.53': {}
-
'@rolldown/pluginutils@1.0.0-rc.2': {}
- '@rollup/plugin-alias@6.0.0(rollup@4.57.1)':
+ '@rolldown/pluginutils@1.0.0-rc.8': {}
+
+ '@rolldown/pluginutils@1.0.0-rc.9': {}
+
+ '@rollup/plugin-alias@6.0.0(rollup@4.59.0)':
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/plugin-commonjs@29.0.0(rollup@4.57.1)':
+ '@rollup/plugin-commonjs@29.0.2(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
commondir: 1.0.1
estree-walker: 2.0.2
fdir: 6.5.0(picomatch@4.0.3)
@@ -8624,176 +10122,220 @@ snapshots:
magic-string: 0.30.21
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/plugin-inject@5.0.5(rollup@4.57.1)':
+ '@rollup/plugin-inject@5.0.5(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
estree-walker: 2.0.2
magic-string: 0.30.21
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/plugin-json@6.1.0(rollup@4.57.1)':
+ '@rollup/plugin-json@6.1.0(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/plugin-node-resolve@16.0.3(rollup@4.57.1)':
+ '@rollup/plugin-node-resolve@16.0.3(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
resolve: 1.22.11
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/plugin-replace@6.0.3(rollup@4.57.1)':
+ '@rollup/plugin-replace@6.0.3(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
magic-string: 0.30.21
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/plugin-terser@0.4.4(rollup@4.57.1)':
+ '@rollup/plugin-terser@0.4.4(rollup@4.59.0)':
dependencies:
serialize-javascript: 6.0.2
- smob: 1.5.0
+ smob: 1.6.1
terser: 5.46.0
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/plugin-yaml@4.1.2(rollup@4.57.1)':
+ '@rollup/plugin-yaml@4.1.2(rollup@4.59.0)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
js-yaml: 4.1.1
tosource: 2.0.0-alpha.3
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/pluginutils@5.3.0(rollup@4.57.1)':
+ '@rollup/pluginutils@5.3.0(rollup@4.59.0)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- '@rollup/rollup-android-arm-eabi@4.57.1':
+ '@rollup/rollup-android-arm-eabi@4.59.0':
optional: true
- '@rollup/rollup-android-arm64@4.57.1':
+ '@rollup/rollup-android-arm64@4.59.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.57.1':
+ '@rollup/rollup-darwin-arm64@4.59.0':
optional: true
- '@rollup/rollup-darwin-x64@4.57.1':
+ '@rollup/rollup-darwin-x64@4.59.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.57.1':
+ '@rollup/rollup-freebsd-arm64@4.59.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.57.1':
+ '@rollup/rollup-freebsd-x64@4.59.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.57.1':
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.57.1':
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.57.1':
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.57.1':
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.57.1':
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-loong64-musl@4.57.1':
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.57.1':
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-ppc64-musl@4.57.1':
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.57.1':
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.57.1':
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.57.1':
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.57.1':
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.57.1':
+ '@rollup/rollup-linux-x64-musl@4.59.0':
optional: true
- '@rollup/rollup-openbsd-x64@4.57.1':
+ '@rollup/rollup-openbsd-x64@4.59.0':
optional: true
- '@rollup/rollup-openharmony-arm64@4.57.1':
+ '@rollup/rollup-openharmony-arm64@4.59.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.57.1':
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.57.1':
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.57.1':
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.57.1':
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
optional: true
- '@shikijs/core@3.22.0':
+ '@shikijs/core@3.23.0':
+ dependencies:
+ '@shikijs/types': 3.23.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+
+ '@shikijs/core@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/primitive': 4.0.2
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/engine-javascript@3.22.0':
+ '@shikijs/engine-javascript@3.23.0':
+ dependencies:
+ '@shikijs/types': 3.23.0
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.4
+
+ '@shikijs/engine-javascript@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.4
- '@shikijs/engine-oniguruma@3.22.0':
+ '@shikijs/engine-oniguruma@3.23.0':
+ dependencies:
+ '@shikijs/types': 3.23.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/engine-oniguruma@4.0.2':
+ dependencies:
+ '@shikijs/types': 4.0.2
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@3.23.0':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 3.23.0
+
+ '@shikijs/langs@4.0.2':
+ dependencies:
+ '@shikijs/types': 4.0.2
+
+ '@shikijs/primitive@4.0.2':
+ dependencies:
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/themes@3.23.0':
+ dependencies:
+ '@shikijs/types': 3.23.0
- '@shikijs/langs@3.22.0':
+ '@shikijs/themes@4.0.2':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/types': 4.0.2
- '@shikijs/themes@3.22.0':
+ '@shikijs/transformers@3.23.0':
dependencies:
- '@shikijs/types': 3.22.0
+ '@shikijs/core': 3.23.0
+ '@shikijs/types': 3.23.0
- '@shikijs/transformers@3.22.0':
+ '@shikijs/types@3.23.0':
dependencies:
- '@shikijs/core': 3.22.0
- '@shikijs/types': 3.22.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
- '@shikijs/types@3.22.0':
+ '@shikijs/types@4.0.2':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
'@shikijs/vscode-textmate@10.0.2': {}
+ '@simple-libs/child-process-utils@1.0.2':
+ dependencies:
+ '@simple-libs/stream-utils': 1.2.0
+
+ '@simple-libs/stream-utils@1.2.0': {}
+
'@sindresorhus/base62@1.0.0': {}
'@sindresorhus/is@4.6.0': {}
@@ -8810,337 +10352,337 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
- '@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@2.6.1))':
+ '@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1))':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
- '@typescript-eslint/types': 8.54.0
- eslint: 9.39.2(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
+ '@typescript-eslint/types': 8.57.0
+ eslint: 10.1.0(jiti@2.6.1)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
estraverse: 5.3.0
picomatch: 4.0.3
- '@swc/helpers@0.5.18':
+ '@swc/helpers@0.5.19':
dependencies:
tslib: 2.8.1
- '@tailwindcss/node@4.1.18':
+ '@tailwindcss/node@4.2.1':
dependencies:
'@jridgewell/remapping': 2.3.5
- enhanced-resolve: 5.18.4
+ enhanced-resolve: 5.20.0
jiti: 2.6.1
- lightningcss: 1.30.2
+ lightningcss: 1.31.1
magic-string: 0.30.21
source-map-js: 1.2.1
- tailwindcss: 4.1.18
+ tailwindcss: 4.2.1
- '@tailwindcss/oxide-android-arm64@4.1.18':
+ '@tailwindcss/oxide-android-arm64@4.2.1':
optional: true
- '@tailwindcss/oxide-darwin-arm64@4.1.18':
+ '@tailwindcss/oxide-darwin-arm64@4.2.1':
optional: true
- '@tailwindcss/oxide-darwin-x64@4.1.18':
+ '@tailwindcss/oxide-darwin-x64@4.2.1':
optional: true
- '@tailwindcss/oxide-freebsd-x64@4.1.18':
+ '@tailwindcss/oxide-freebsd-x64@4.2.1':
optional: true
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
optional: true
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
optional: true
- '@tailwindcss/oxide-linux-arm64-musl@4.1.18':
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
optional: true
- '@tailwindcss/oxide-linux-x64-gnu@4.1.18':
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
optional: true
- '@tailwindcss/oxide-linux-x64-musl@4.1.18':
+ '@tailwindcss/oxide-linux-x64-musl@4.2.1':
optional: true
- '@tailwindcss/oxide-wasm32-wasi@4.1.18':
+ '@tailwindcss/oxide-wasm32-wasi@4.2.1':
optional: true
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
optional: true
- '@tailwindcss/oxide-win32-x64-msvc@4.1.18':
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
optional: true
- '@tailwindcss/oxide@4.1.18':
+ '@tailwindcss/oxide@4.2.1':
optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.1.18
- '@tailwindcss/oxide-darwin-arm64': 4.1.18
- '@tailwindcss/oxide-darwin-x64': 4.1.18
- '@tailwindcss/oxide-freebsd-x64': 4.1.18
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18
- '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18
- '@tailwindcss/oxide-linux-arm64-musl': 4.1.18
- '@tailwindcss/oxide-linux-x64-gnu': 4.1.18
- '@tailwindcss/oxide-linux-x64-musl': 4.1.18
- '@tailwindcss/oxide-wasm32-wasi': 4.1.18
- '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
- '@tailwindcss/oxide-win32-x64-msvc': 4.1.18
-
- '@tailwindcss/postcss@4.1.18':
+ '@tailwindcss/oxide-android-arm64': 4.2.1
+ '@tailwindcss/oxide-darwin-arm64': 4.2.1
+ '@tailwindcss/oxide-darwin-x64': 4.2.1
+ '@tailwindcss/oxide-freebsd-x64': 4.2.1
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1
+ '@tailwindcss/oxide-linux-arm64-musl': 4.2.1
+ '@tailwindcss/oxide-linux-x64-gnu': 4.2.1
+ '@tailwindcss/oxide-linux-x64-musl': 4.2.1
+ '@tailwindcss/oxide-wasm32-wasi': 4.2.1
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1
+ '@tailwindcss/oxide-win32-x64-msvc': 4.2.1
+
+ '@tailwindcss/postcss@4.2.1':
dependencies:
'@alloc/quick-lru': 5.2.0
- '@tailwindcss/node': 4.1.18
- '@tailwindcss/oxide': 4.1.18
- postcss: 8.5.6
- tailwindcss: 4.1.18
+ '@tailwindcss/node': 4.2.1
+ '@tailwindcss/oxide': 4.2.1
+ postcss: 8.5.8
+ tailwindcss: 4.2.1
- '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))':
+ '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))':
dependencies:
- '@tailwindcss/node': 4.1.18
- '@tailwindcss/oxide': 4.1.18
- tailwindcss: 4.1.18
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
+ '@tailwindcss/node': 4.2.1
+ '@tailwindcss/oxide': 4.2.1
+ tailwindcss: 4.2.1
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
'@tanstack/table-core@8.21.3': {}
- '@tanstack/virtual-core@3.13.18': {}
+ '@tanstack/virtual-core@3.13.21': {}
- '@tanstack/vue-table@8.21.3(vue@3.5.27(typescript@5.9.3))':
+ '@tanstack/vue-table@8.21.3(vue@3.5.30(typescript@5.9.3))':
dependencies:
'@tanstack/table-core': 8.21.3
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
- '@tanstack/vue-virtual@3.13.18(vue@3.5.27(typescript@5.9.3))':
+ '@tanstack/vue-virtual@3.13.21(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@tanstack/virtual-core': 3.13.18
- vue: 3.5.27(typescript@5.9.3)
+ '@tanstack/virtual-core': 3.13.21
+ vue: 3.5.30(typescript@5.9.3)
- '@tiptap/core@3.18.0(@tiptap/pm@3.18.0)':
+ '@tiptap/core@3.20.1(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/pm': 3.18.0
+ '@tiptap/pm': 3.20.1
- '@tiptap/extension-blockquote@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-blockquote@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-bold@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-bold@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-bubble-menu@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extension-bubble-menu@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@floating-ui/dom': 1.7.5
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
- '@tiptap/extension-bullet-list@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-bullet-list@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-code-block@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extension-code-block@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
- '@tiptap/extension-code@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-code@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28)':
+ '@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
- '@tiptap/y-tiptap': 3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+ '@tiptap/y-tiptap': 3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)
yjs: 13.6.28
- '@tiptap/extension-document@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-document@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-drag-handle-vue-3@3.18.0(@tiptap/extension-drag-handle@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)))(@tiptap/pm@3.18.0)(@tiptap/vue-3@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))':
+ '@tiptap/extension-drag-handle-vue-3@3.20.1(@tiptap/extension-drag-handle@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)))(@tiptap/pm@3.20.1)(@tiptap/vue-3@3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@tiptap/extension-drag-handle': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))
- '@tiptap/pm': 3.18.0
- '@tiptap/vue-3': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.27(typescript@5.9.3))
- vue: 3.5.27(typescript@5.9.3)
+ '@tiptap/extension-drag-handle': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))
+ '@tiptap/pm': 3.20.1
+ '@tiptap/vue-3': 3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@5.9.3)
- '@tiptap/extension-drag-handle@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/extension-collaboration@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))':
+ '@tiptap/extension-drag-handle@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/extension-collaboration@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28))(@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))':
dependencies:
- '@floating-ui/dom': 1.7.5
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/extension-collaboration': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28)
- '@tiptap/extension-node-range': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
- '@tiptap/y-tiptap': 3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/extension-collaboration': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28))(yjs@13.6.28)
+ '@tiptap/extension-node-range': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+ '@tiptap/y-tiptap': 3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)
- '@tiptap/extension-dropcursor@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-dropcursor@3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-floating-menu@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extension-floating-menu@3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@floating-ui/dom': 1.7.5
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
- '@tiptap/extension-gapcursor@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-gapcursor@3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-hard-break@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-hard-break@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-heading@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-heading@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-horizontal-rule@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extension-horizontal-rule@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
- '@tiptap/extension-image@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-image@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-italic@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-italic@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-link@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extension-link@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
linkifyjs: 4.3.2
- '@tiptap/extension-list-item@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-list-item@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-list-keymap@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-list-keymap@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
- '@tiptap/extension-mention@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(@tiptap/suggestion@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-mention@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(@tiptap/suggestion@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
- '@tiptap/suggestion': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+ '@tiptap/suggestion': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-node-range@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extension-node-range@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
- '@tiptap/extension-ordered-list@3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-ordered-list@3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-paragraph@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-paragraph@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-placeholder@3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-placeholder@3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/extension-strike@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-strike@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-text@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-text@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extension-underline@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))':
+ '@tiptap/extension-underline@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
- '@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
- '@tiptap/markdown@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
+ '@tiptap/markdown@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
- marked: 17.0.1
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+ marked: 17.0.4
- '@tiptap/pm@3.18.0':
+ '@tiptap/pm@3.20.1':
dependencies:
- prosemirror-changeset: 2.3.1
+ prosemirror-changeset: 2.4.0
prosemirror-collab: 1.3.1
prosemirror-commands: 1.7.1
prosemirror-dropcursor: 1.8.2
- prosemirror-gapcursor: 1.4.0
+ prosemirror-gapcursor: 1.4.1
prosemirror-history: 1.5.0
prosemirror-inputrules: 1.5.1
prosemirror-keymap: 1.2.3
- prosemirror-markdown: 1.13.3
- prosemirror-menu: 1.2.5
+ prosemirror-markdown: 1.13.4
+ prosemirror-menu: 1.3.0
prosemirror-model: 1.25.4
prosemirror-schema-basic: 1.2.4
prosemirror-schema-list: 1.5.1
prosemirror-state: 1.4.4
prosemirror-tables: 1.8.5
- prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)
+ prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)
prosemirror-transform: 1.11.0
- prosemirror-view: 1.41.5
-
- '@tiptap/starter-kit@3.18.0':
- dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/extension-blockquote': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-bold': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-bullet-list': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/extension-code': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-code-block': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-document': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-dropcursor': 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/extension-gapcursor': 3.18.0(@tiptap/extensions@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/extension-hard-break': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-heading': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-horizontal-rule': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-italic': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-link': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-list': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-list-item': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/extension-list-keymap': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/extension-ordered-list': 3.18.0(@tiptap/extension-list@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0))
- '@tiptap/extension-paragraph': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-strike': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-text': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extension-underline': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))
- '@tiptap/extensions': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
-
- '@tiptap/suggestion@3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)':
- dependencies:
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
-
- '@tiptap/vue-3@3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)(vue@3.5.27(typescript@5.9.3))':
- dependencies:
- '@floating-ui/dom': 1.7.5
- '@tiptap/core': 3.18.0(@tiptap/pm@3.18.0)
- '@tiptap/pm': 3.18.0
- vue: 3.5.27(typescript@5.9.3)
+ prosemirror-view: 1.41.6
+
+ '@tiptap/starter-kit@3.20.1':
+ dependencies:
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/extension-blockquote': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-bold': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-bullet-list': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-code': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-code-block': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-document': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-dropcursor': 3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-gapcursor': 3.20.1(@tiptap/extensions@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-hard-break': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-heading': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-horizontal-rule': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-italic': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-link': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-list': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-list-item': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-list-keymap': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-ordered-list': 3.20.1(@tiptap/extension-list@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1))
+ '@tiptap/extension-paragraph': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-strike': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-text': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extension-underline': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))
+ '@tiptap/extensions': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+
+ '@tiptap/suggestion@3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)':
+ dependencies:
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+
+ '@tiptap/vue-3@3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)(vue@3.5.30(typescript@5.9.3))':
+ dependencies:
+ '@floating-ui/dom': 1.7.6
+ '@tiptap/core': 3.20.1(@tiptap/pm@3.20.1)
+ '@tiptap/pm': 3.20.1
+ vue: 3.5.30(typescript@5.9.3)
optionalDependencies:
- '@tiptap/extension-bubble-menu': 3.18.0(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
- '@tiptap/extension-floating-menu': 3.18.0(@floating-ui/dom@1.7.5)(@tiptap/core@3.18.0(@tiptap/pm@3.18.0))(@tiptap/pm@3.18.0)
+ '@tiptap/extension-bubble-menu': 3.20.1(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
+ '@tiptap/extension-floating-menu': 3.20.1(@floating-ui/dom@1.7.6)(@tiptap/core@3.20.1(@tiptap/pm@3.20.1))(@tiptap/pm@3.20.1)
- '@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)':
+ '@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6)(y-protocols@1.0.7(yjs@13.6.28))(yjs@13.6.28)':
dependencies:
lib0: 0.2.117
prosemirror-model: 1.25.4
prosemirror-state: 1.4.4
- prosemirror-view: 1.41.5
+ prosemirror-view: 1.41.6
y-protocols: 1.0.7(yjs@13.6.28)
yjs: 13.6.28
@@ -9153,6 +10695,8 @@ snapshots:
dependencies:
'@types/ms': 2.1.0
+ '@types/esrecurse@4.3.1': {}
+
'@types/estree@1.0.8': {}
'@types/hast@3.0.4':
@@ -9163,7 +10707,7 @@ snapshots:
'@types/linkify-it@5.0.0': {}
- '@types/lodash@4.17.23': {}
+ '@types/lodash@4.17.24': {}
'@types/markdown-it@14.1.2':
dependencies:
@@ -9196,15 +10740,15 @@ snapshots:
'@types/web-bluetooth@0.0.21': {}
- '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.54.0
- '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.54.0
- eslint: 9.39.2(jiti@2.6.1)
+ '@typescript-eslint/parser': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.57.0
+ '@typescript-eslint/type-utils': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.57.0
+ eslint: 10.1.0(jiti@2.6.1)
ignore: 7.0.5
natural-compare: 1.4.0
ts-api-utils: 2.4.0(typescript@5.9.3)
@@ -9212,88 +10756,88 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.54.0
- '@typescript-eslint/types': 8.54.0
- '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.54.0
+ '@typescript-eslint/scope-manager': 8.57.0
+ '@typescript-eslint/types': 8.57.0
+ '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.57.0
debug: 4.4.3
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.54.0
+ '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.57.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.54.0':
+ '@typescript-eslint/scope-manager@8.57.0':
dependencies:
- '@typescript-eslint/types': 8.54.0
- '@typescript-eslint/visitor-keys': 8.54.0
+ '@typescript-eslint/types': 8.57.0
+ '@typescript-eslint/visitor-keys': 8.57.0
- '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.54.0
- '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.57.0
+ '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.54.0': {}
+ '@typescript-eslint/types@8.57.0': {}
- '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.54.0
- '@typescript-eslint/visitor-keys': 8.54.0
+ '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.57.0
+ '@typescript-eslint/visitor-keys': 8.57.0
debug: 4.4.3
- minimatch: 9.0.5
- semver: 7.7.3
+ minimatch: 10.2.4
+ semver: 7.7.4
tinyglobby: 0.2.15
ts-api-utils: 2.4.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.54.0
- '@typescript-eslint/types': 8.54.0
- '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3)
- eslint: 9.39.2(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.57.0
+ '@typescript-eslint/types': 8.57.0
+ '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3)
+ eslint: 10.1.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.54.0':
+ '@typescript-eslint/visitor-keys@8.57.0':
dependencies:
- '@typescript-eslint/types': 8.54.0
- eslint-visitor-keys: 4.2.1
+ '@typescript-eslint/types': 8.57.0
+ eslint-visitor-keys: 5.0.1
'@ungap/structured-clone@1.3.0': {}
- '@unhead/vue@2.1.2(vue@3.5.27(typescript@5.9.3))':
+ '@unhead/vue@2.1.12(vue@3.5.30(typescript@5.9.3))':
dependencies:
hookable: 6.0.1
- unhead: 2.1.2
- vue: 3.5.27(typescript@5.9.3)
+ unhead: 2.1.12
+ vue: 3.5.30(typescript@5.9.3)
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
optional: true
@@ -9354,16 +10898,16 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
optional: true
- '@vercel/nft@1.3.0(rollup@4.57.1)':
+ '@vercel/nft@1.3.2(rollup@4.59.0)':
dependencies:
'@mapbox/node-pre-gyp': 2.0.3
- '@rollup/pluginutils': 5.3.0(rollup@4.57.1)
- acorn: 8.15.0
- acorn-import-attributes: 1.9.5(acorn@8.15.0)
+ '@rollup/pluginutils': 5.3.0(rollup@4.59.0)
+ acorn: 8.16.0
+ acorn-import-attributes: 1.9.5(acorn@8.16.0)
async-sema: 3.1.1
bindings: 1.5.0
estree-walker: 2.0.2
- glob: 13.0.0
+ glob: 13.0.6
graceful-fs: 4.2.11
node-gyp-build: 4.8.4
picomatch: 4.0.3
@@ -9373,45 +10917,63 @@ snapshots:
- rollup
- supports-color
- '@vitejs/plugin-vue-jsx@5.1.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@vitejs/plugin-vue-jsx@5.1.4(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
- '@rolldown/pluginutils': 1.0.0-rc.2
+ '@rolldown/pluginutils': 1.0.0-rc.8
+ '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vue: 3.5.30(typescript@5.9.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-rc.9
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vue: 3.5.27(typescript@5.9.3)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vue: 3.5.30(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@6.0.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.4(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@rolldown/pluginutils': 1.0.0-beta.53
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vue: 3.5.27(typescript@5.9.3)
+ '@rolldown/pluginutils': 1.0.0-rc.2
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vue: 3.5.30(typescript@5.9.3)
+
+ '@vitejs/plugin-vue@6.0.5(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.0-rc.2
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vue: 3.5.30(typescript@5.9.3)
- '@volar/language-core@2.4.27':
+ '@volar/language-core@2.4.28':
dependencies:
- '@volar/source-map': 2.4.27
+ '@volar/source-map': 2.4.28
- '@volar/source-map@2.4.27': {}
+ '@volar/source-map@2.4.28': {}
- '@volar/typescript@2.4.27':
+ '@volar/typescript@2.4.28':
dependencies:
- '@volar/language-core': 2.4.27
+ '@volar/language-core': 2.4.28
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue-macros/common@3.1.2(vue@3.5.27(typescript@5.9.3))':
+ '@vue-macros/common@3.1.2(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@vue/compiler-sfc': 3.5.27
+ '@vue/compiler-sfc': 3.5.30
ast-kit: 2.2.0
local-pkg: 1.1.2
magic-string-ast: 1.0.3
unplugin-utils: 0.3.1
optionalDependencies:
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
'@vue/babel-helper-vue-transform-on@2.0.1': {}
@@ -9425,7 +10987,7 @@ snapshots:
'@babel/types': 7.29.0
'@vue/babel-helper-vue-transform-on': 2.0.1
'@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0)
- '@vue/shared': 3.5.27
+ '@vue/shared': 3.5.30
optionalDependencies:
'@babel/core': 7.29.0
transitivePeerDependencies:
@@ -9438,39 +11000,39 @@ snapshots:
'@babel/helper-module-imports': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
'@babel/parser': 7.29.0
- '@vue/compiler-sfc': 3.5.27
+ '@vue/compiler-sfc': 3.5.30
transitivePeerDependencies:
- supports-color
- '@vue/compiler-core@3.5.27':
+ '@vue/compiler-core@3.5.30':
dependencies:
'@babel/parser': 7.29.0
- '@vue/shared': 3.5.27
+ '@vue/shared': 3.5.30
entities: 7.0.1
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.5.27':
+ '@vue/compiler-dom@3.5.30':
dependencies:
- '@vue/compiler-core': 3.5.27
- '@vue/shared': 3.5.27
+ '@vue/compiler-core': 3.5.30
+ '@vue/shared': 3.5.30
- '@vue/compiler-sfc@3.5.27':
+ '@vue/compiler-sfc@3.5.30':
dependencies:
'@babel/parser': 7.29.0
- '@vue/compiler-core': 3.5.27
- '@vue/compiler-dom': 3.5.27
- '@vue/compiler-ssr': 3.5.27
- '@vue/shared': 3.5.27
+ '@vue/compiler-core': 3.5.30
+ '@vue/compiler-dom': 3.5.30
+ '@vue/compiler-ssr': 3.5.30
+ '@vue/shared': 3.5.30
estree-walker: 2.0.2
magic-string: 0.30.21
- postcss: 8.5.6
+ postcss: 8.5.8
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.27':
+ '@vue/compiler-ssr@3.5.30':
dependencies:
- '@vue/compiler-dom': 3.5.27
- '@vue/shared': 3.5.27
+ '@vue/compiler-dom': 3.5.30
+ '@vue/shared': 3.5.30
'@vue/devtools-api@6.6.4': {}
@@ -9478,17 +11040,15 @@ snapshots:
dependencies:
'@vue/devtools-kit': 7.7.9
- '@vue/devtools-core@8.0.5(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@vue/devtools-api@8.1.0':
dependencies:
- '@vue/devtools-kit': 8.0.5
- '@vue/devtools-shared': 8.0.5
- mitt: 3.0.1
- nanoid: 5.1.6
- pathe: 2.0.3
- vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
- vue: 3.5.27(typescript@5.9.3)
- transitivePeerDependencies:
- - vite
+ '@vue/devtools-kit': 8.1.0
+
+ '@vue/devtools-core@8.0.7(vue@3.5.30(typescript@5.9.3))':
+ dependencies:
+ '@vue/devtools-kit': 8.0.7
+ '@vue/devtools-shared': 8.0.7
+ vue: 3.5.30(typescript@5.9.3)
'@vue/devtools-kit@7.7.9':
dependencies:
@@ -9500,126 +11060,123 @@ snapshots:
speakingurl: 14.0.1
superjson: 2.2.6
- '@vue/devtools-kit@8.0.5':
+ '@vue/devtools-kit@8.0.7':
dependencies:
- '@vue/devtools-shared': 8.0.5
+ '@vue/devtools-shared': 8.0.7
+ birpc: 2.9.0
+ hookable: 5.5.3
+ perfect-debounce: 2.1.0
+
+ '@vue/devtools-kit@8.1.0':
+ dependencies:
+ '@vue/devtools-shared': 8.1.0
birpc: 2.9.0
hookable: 5.5.3
- mitt: 3.0.1
perfect-debounce: 2.1.0
- speakingurl: 14.0.1
- superjson: 2.2.6
'@vue/devtools-shared@7.7.9':
dependencies:
rfdc: 1.4.1
- '@vue/devtools-shared@8.0.5':
+ '@vue/devtools-shared@8.0.7': {}
+
+ '@vue/devtools-shared@8.1.0': {}
+
+ '@vue/language-core@3.2.5':
dependencies:
- rfdc: 1.4.1
+ '@volar/language-core': 2.4.28
+ '@vue/compiler-dom': 3.5.30
+ '@vue/shared': 3.5.30
+ alien-signals: 3.1.2
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ picomatch: 4.0.3
- '@vue/language-core@3.2.4':
+ '@vue/language-core@3.2.6':
dependencies:
- '@volar/language-core': 2.4.27
- '@vue/compiler-dom': 3.5.27
- '@vue/shared': 3.5.27
+ '@volar/language-core': 2.4.28
+ '@vue/compiler-dom': 3.5.30
+ '@vue/shared': 3.5.30
alien-signals: 3.1.2
muggle-string: 0.4.1
path-browserify: 1.0.1
picomatch: 4.0.3
- '@vue/reactivity@3.5.27':
+ '@vue/reactivity@3.5.30':
dependencies:
- '@vue/shared': 3.5.27
+ '@vue/shared': 3.5.30
- '@vue/runtime-core@3.5.27':
+ '@vue/runtime-core@3.5.30':
dependencies:
- '@vue/reactivity': 3.5.27
- '@vue/shared': 3.5.27
+ '@vue/reactivity': 3.5.30
+ '@vue/shared': 3.5.30
- '@vue/runtime-dom@3.5.27':
+ '@vue/runtime-dom@3.5.30':
dependencies:
- '@vue/reactivity': 3.5.27
- '@vue/runtime-core': 3.5.27
- '@vue/shared': 3.5.27
+ '@vue/reactivity': 3.5.30
+ '@vue/runtime-core': 3.5.30
+ '@vue/shared': 3.5.30
csstype: 3.2.3
- '@vue/server-renderer@3.5.27(vue@3.5.27(typescript@5.9.3))':
+ '@vue/server-renderer@3.5.30(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@vue/compiler-ssr': 3.5.27
- '@vue/shared': 3.5.27
- vue: 3.5.27(typescript@5.9.3)
+ '@vue/compiler-ssr': 3.5.30
+ '@vue/shared': 3.5.30
+ vue: 3.5.30(typescript@5.9.3)
- '@vue/shared@3.5.27': {}
+ '@vue/shared@3.5.30': {}
- '@vueuse/core@10.11.1(vue@3.5.27(typescript@5.9.3))':
+ '@vueuse/core@10.11.1(vue@3.5.30(typescript@5.9.3))':
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.11.1
- '@vueuse/shared': 10.11.1(vue@3.5.27(typescript@5.9.3))
- vue-demi: 0.14.10(vue@3.5.27(typescript@5.9.3))
+ '@vueuse/shared': 10.11.1(vue@3.5.30(typescript@5.9.3))
+ vue-demi: 0.14.10(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- '@vueuse/core@12.8.2(typescript@5.9.3)':
- dependencies:
- '@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 12.8.2
- '@vueuse/shared': 12.8.2(typescript@5.9.3)
- vue: 3.5.27(typescript@5.9.3)
- transitivePeerDependencies:
- - typescript
-
- '@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3))':
+ '@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3))':
dependencies:
'@types/web-bluetooth': 0.0.21
- '@vueuse/metadata': 14.2.0
- '@vueuse/shared': 14.2.0(vue@3.5.27(typescript@5.9.3))
- vue: 3.5.27(typescript@5.9.3)
+ '@vueuse/metadata': 14.2.1
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@5.9.3)
- '@vueuse/integrations@14.2.0(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.27(typescript@5.9.3))':
+ '@vueuse/integrations@14.2.1(change-case@5.4.4)(fuse.js@7.1.0)(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3))
- '@vueuse/shared': 14.2.0(vue@3.5.27(typescript@5.9.3))
- vue: 3.5.27(typescript@5.9.3)
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@5.9.3)
optionalDependencies:
change-case: 5.4.4
fuse.js: 7.1.0
'@vueuse/metadata@10.11.1': {}
- '@vueuse/metadata@12.8.2': {}
+ '@vueuse/metadata@14.2.1': {}
- '@vueuse/metadata@14.2.0': {}
-
- '@vueuse/nuxt@14.2.0(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))':
+ '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))':
dependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3))
- '@vueuse/metadata': 14.2.0
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/metadata': 14.2.1
local-pkg: 1.1.2
- nuxt: 4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2)
- vue: 3.5.27(typescript@5.9.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2)
+ vue: 3.5.30(typescript@5.9.3)
transitivePeerDependencies:
- magicast
- '@vueuse/shared@10.11.1(vue@3.5.27(typescript@5.9.3))':
+ '@vueuse/shared@10.11.1(vue@3.5.30(typescript@5.9.3))':
dependencies:
- vue-demi: 0.14.10(vue@3.5.27(typescript@5.9.3))
+ vue-demi: 0.14.10(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
- '@vueuse/shared@12.8.2(typescript@5.9.3)':
- dependencies:
- vue: 3.5.27(typescript@5.9.3)
- transitivePeerDependencies:
- - typescript
-
- '@vueuse/shared@14.2.0(vue@3.5.27(typescript@5.9.3))':
+ '@vueuse/shared@14.2.1(vue@3.5.30(typescript@5.9.3))':
dependencies:
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
'@webcontainer/env@1.1.1': {}
@@ -9629,26 +11186,26 @@ snapshots:
dependencies:
event-target-shim: 5.0.1
- acorn-import-attributes@1.9.5(acorn@8.15.0):
+ acorn-import-attributes@1.9.5(acorn@8.16.0):
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
- acorn-jsx@5.3.2(acorn@8.15.0):
+ acorn-jsx@5.3.2(acorn@8.16.0):
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
- acorn@8.15.0: {}
+ acorn@8.16.0: {}
agent-base@7.1.4: {}
- ajv@6.12.6:
+ ajv@6.14.0:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
- ajv@8.17.1:
+ ajv@8.18.0:
dependencies:
fast-deep-equal: 3.1.3
fast-uri: 3.1.0
@@ -9691,10 +11248,11 @@ snapshots:
buffer-crc32: 1.0.0
readable-stream: 4.7.0
readdir-glob: 1.1.3
- tar-stream: 3.1.7
+ tar-stream: 3.1.8
zip-stream: 6.0.1
transitivePeerDependencies:
- bare-abort-controller
+ - bare-buffer
- react-native-b4a
are-docs-informative@0.0.2: {}
@@ -9723,42 +11281,82 @@ snapshots:
async@3.2.6: {}
- autoprefixer@10.4.24(postcss@8.5.6):
+ autoprefixer@10.4.27(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
- caniuse-lite: 1.0.30001766
+ caniuse-lite: 1.0.30001777
fraction.js: 5.3.4
picocolors: 1.1.1
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
- b4a@1.7.3: {}
+ b4a@1.8.0: {}
bail@2.0.2: {}
balanced-match@1.0.2: {}
+ balanced-match@4.0.4: {}
+
bare-events@2.8.2: {}
+ bare-fs@4.5.5:
+ dependencies:
+ bare-events: 2.8.2
+ bare-path: 3.0.0
+ bare-stream: 2.8.1(bare-events@2.8.2)
+ bare-url: 2.3.2
+ fast-fifo: 1.3.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ bare-os@3.7.1: {}
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.7.1
+
+ bare-stream@2.8.1(bare-events@2.8.2):
+ dependencies:
+ streamx: 2.23.0
+ teex: 1.0.1
+ optionalDependencies:
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ bare-url@2.3.2:
+ dependencies:
+ bare-path: 3.0.0
+
base64-js@1.5.1: {}
- baseline-browser-mapping@2.9.19: {}
+ baseline-browser-mapping@2.10.0: {}
better-sqlite3@12.6.2:
dependencies:
bindings: 1.5.0
prebuild-install: 7.1.3
+ better-sqlite3@12.8.0:
+ dependencies:
+ bindings: 1.5.0
+ prebuild-install: 7.1.3
+
bindings@1.5.0:
dependencies:
file-uri-to-path: 1.0.0
birpc@2.9.0: {}
+ birpc@4.0.0: {}
+
bl@4.1.0:
dependencies:
buffer: 5.7.1
@@ -9767,29 +11365,24 @@ snapshots:
boolbase@1.0.0: {}
- brace-expansion@1.1.12:
+ brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
- concat-map: 0.0.1
- brace-expansion@2.0.2:
+ brace-expansion@5.0.4:
dependencies:
- balanced-match: 1.0.2
+ balanced-match: 4.0.4
braces@3.0.3:
dependencies:
fill-range: 7.1.1
- brotli@1.3.3:
- dependencies:
- base64-js: 1.5.1
-
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.9.19
- caniuse-lite: 1.0.30001766
- electron-to-chromium: 1.5.283
- node-releases: 2.0.27
+ baseline-browser-mapping: 2.10.0
+ caniuse-lite: 1.0.30001777
+ electron-to-chromium: 1.5.307
+ node-releases: 2.0.36
update-browserslist-db: 1.2.3(browserslist@4.28.1)
buffer-crc32@1.0.0: {}
@@ -9812,17 +11405,17 @@ snapshots:
dependencies:
run-applescript: 7.1.0
- bundle-require@5.1.0(esbuild@0.27.2):
+ bundle-require@5.1.0(esbuild@0.27.4):
dependencies:
- esbuild: 0.27.2
+ esbuild: 0.27.4
load-tsconfig: 0.2.5
- c12@3.3.3(magicast@0.5.1):
+ c12@3.3.3(magicast@0.5.2):
dependencies:
chokidar: 5.0.0
- confbox: 0.2.2
+ confbox: 0.2.4
defu: 6.1.4
- dotenv: 17.2.3
+ dotenv: 17.3.1
exsolve: 1.0.8
giget: 2.0.0
jiti: 2.6.1
@@ -9832,10 +11425,12 @@ snapshots:
pkg-types: 2.3.0
rc9: 2.1.2
optionalDependencies:
- magicast: 0.5.1
+ magicast: 0.5.2
cac@6.7.14: {}
+ cac@7.0.0: {}
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -9858,19 +11453,14 @@ snapshots:
caniuse-api@3.0.0:
dependencies:
browserslist: 4.28.1
- caniuse-lite: 1.0.30001766
+ caniuse-lite: 1.0.30001777
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
- caniuse-lite@1.0.30001766: {}
+ caniuse-lite@1.0.30001777: {}
ccount@2.0.1: {}
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
-
change-case@5.4.4: {}
char-regex@1.0.2: {}
@@ -9901,7 +11491,7 @@ snapshots:
dependencies:
consola: 3.4.2
- citty@0.2.0: {}
+ citty@0.2.1: {}
clean-git-ref@2.0.1: {}
@@ -9912,7 +11502,7 @@ snapshots:
clipboardy@4.0.0:
dependencies:
execa: 8.0.1
- is-wsl: 3.1.0
+ is-wsl: 3.1.1
is64bit: 2.0.0
cliui@8.0.1:
@@ -9921,8 +11511,6 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
- clone@2.1.2: {}
-
cluster-key-slot@1.1.2: {}
color-convert@2.0.1:
@@ -9960,24 +11548,23 @@ snapshots:
normalize-path: 3.0.0
readable-stream: 4.7.0
- concat-map@0.0.1: {}
-
confbox@0.1.8: {}
- confbox@0.2.2: {}
+ confbox@0.2.4: {}
consola@3.4.2: {}
- conventional-changelog-angular@8.1.0:
+ conventional-changelog-angular@8.3.0:
dependencies:
compare-func: 2.0.0
- conventional-changelog-conventionalcommits@9.1.0:
+ conventional-changelog-conventionalcommits@9.3.0:
dependencies:
compare-func: 2.0.0
- conventional-commits-parser@6.2.1:
+ conventional-commits-parser@6.3.0:
dependencies:
+ '@simple-libs/stream-utils': 1.2.0
meow: 13.2.0
convert-source-map@2.0.0: {}
@@ -9990,24 +11577,20 @@ snapshots:
dependencies:
is-what: 5.5.0
- copy-paste@2.2.0:
- dependencies:
- iconv-lite: 0.4.24
-
core-js-compat@3.48.0:
dependencies:
browserslist: 4.28.1
core-util-is@1.0.3: {}
- cosmiconfig-typescript-loader@6.2.0(@types/node@25.2.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3):
+ cosmiconfig-typescript-loader@6.2.0(@types/node@25.2.0)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3):
dependencies:
'@types/node': 25.2.0
- cosmiconfig: 9.0.0(typescript@5.9.3)
+ cosmiconfig: 9.0.1(typescript@5.9.3)
jiti: 2.6.1
typescript: 5.9.3
- cosmiconfig@9.0.0(typescript@5.9.3):
+ cosmiconfig@9.0.1(typescript@5.9.3):
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
@@ -10037,9 +11620,9 @@ snapshots:
dependencies:
uncrypto: 0.1.3
- css-declaration-sorter@7.3.1(postcss@8.5.6):
+ css-declaration-sorter@7.3.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
css-select@5.2.2:
dependencies:
@@ -10054,58 +11637,58 @@ snapshots:
mdn-data: 2.0.28
source-map-js: 1.2.1
- css-tree@3.1.0:
+ css-tree@3.2.1:
dependencies:
- mdn-data: 2.12.2
+ mdn-data: 2.27.1
source-map-js: 1.2.1
css-what@6.2.2: {}
cssesc@3.0.0: {}
- cssnano-preset-default@7.0.10(postcss@8.5.6):
+ cssnano-preset-default@7.0.11(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
- css-declaration-sorter: 7.3.1(postcss@8.5.6)
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
- postcss-calc: 10.1.1(postcss@8.5.6)
- postcss-colormin: 7.0.5(postcss@8.5.6)
- postcss-convert-values: 7.0.8(postcss@8.5.6)
- postcss-discard-comments: 7.0.5(postcss@8.5.6)
- postcss-discard-duplicates: 7.0.2(postcss@8.5.6)
- postcss-discard-empty: 7.0.1(postcss@8.5.6)
- postcss-discard-overridden: 7.0.1(postcss@8.5.6)
- postcss-merge-longhand: 7.0.5(postcss@8.5.6)
- postcss-merge-rules: 7.0.7(postcss@8.5.6)
- postcss-minify-font-values: 7.0.1(postcss@8.5.6)
- postcss-minify-gradients: 7.0.1(postcss@8.5.6)
- postcss-minify-params: 7.0.5(postcss@8.5.6)
- postcss-minify-selectors: 7.0.5(postcss@8.5.6)
- postcss-normalize-charset: 7.0.1(postcss@8.5.6)
- postcss-normalize-display-values: 7.0.1(postcss@8.5.6)
- postcss-normalize-positions: 7.0.1(postcss@8.5.6)
- postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6)
- postcss-normalize-string: 7.0.1(postcss@8.5.6)
- postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6)
- postcss-normalize-unicode: 7.0.5(postcss@8.5.6)
- postcss-normalize-url: 7.0.1(postcss@8.5.6)
- postcss-normalize-whitespace: 7.0.1(postcss@8.5.6)
- postcss-ordered-values: 7.0.2(postcss@8.5.6)
- postcss-reduce-initial: 7.0.5(postcss@8.5.6)
- postcss-reduce-transforms: 7.0.1(postcss@8.5.6)
- postcss-svgo: 7.1.0(postcss@8.5.6)
- postcss-unique-selectors: 7.0.4(postcss@8.5.6)
-
- cssnano-utils@5.0.1(postcss@8.5.6):
- dependencies:
- postcss: 8.5.6
-
- cssnano@7.1.2(postcss@8.5.6):
- dependencies:
- cssnano-preset-default: 7.0.10(postcss@8.5.6)
+ css-declaration-sorter: 7.3.1(postcss@8.5.8)
+ cssnano-utils: 5.0.1(postcss@8.5.8)
+ postcss: 8.5.8
+ postcss-calc: 10.1.1(postcss@8.5.8)
+ postcss-colormin: 7.0.6(postcss@8.5.8)
+ postcss-convert-values: 7.0.9(postcss@8.5.8)
+ postcss-discard-comments: 7.0.6(postcss@8.5.8)
+ postcss-discard-duplicates: 7.0.2(postcss@8.5.8)
+ postcss-discard-empty: 7.0.1(postcss@8.5.8)
+ postcss-discard-overridden: 7.0.1(postcss@8.5.8)
+ postcss-merge-longhand: 7.0.5(postcss@8.5.8)
+ postcss-merge-rules: 7.0.8(postcss@8.5.8)
+ postcss-minify-font-values: 7.0.1(postcss@8.5.8)
+ postcss-minify-gradients: 7.0.1(postcss@8.5.8)
+ postcss-minify-params: 7.0.6(postcss@8.5.8)
+ postcss-minify-selectors: 7.0.6(postcss@8.5.8)
+ postcss-normalize-charset: 7.0.1(postcss@8.5.8)
+ postcss-normalize-display-values: 7.0.1(postcss@8.5.8)
+ postcss-normalize-positions: 7.0.1(postcss@8.5.8)
+ postcss-normalize-repeat-style: 7.0.1(postcss@8.5.8)
+ postcss-normalize-string: 7.0.1(postcss@8.5.8)
+ postcss-normalize-timing-functions: 7.0.1(postcss@8.5.8)
+ postcss-normalize-unicode: 7.0.6(postcss@8.5.8)
+ postcss-normalize-url: 7.0.1(postcss@8.5.8)
+ postcss-normalize-whitespace: 7.0.1(postcss@8.5.8)
+ postcss-ordered-values: 7.0.2(postcss@8.5.8)
+ postcss-reduce-initial: 7.0.6(postcss@8.5.8)
+ postcss-reduce-transforms: 7.0.1(postcss@8.5.8)
+ postcss-svgo: 7.1.1(postcss@8.5.8)
+ postcss-unique-selectors: 7.0.5(postcss@8.5.8)
+
+ cssnano-utils@5.0.1(postcss@8.5.8):
+ dependencies:
+ postcss: 8.5.8
+
+ cssnano@7.1.3(postcss@8.5.8):
+ dependencies:
+ cssnano-preset-default: 7.0.11(postcss@8.5.8)
lilconfig: 3.1.3
- postcss: 8.5.6
+ postcss: 8.5.8
csso@5.0.5:
dependencies:
@@ -10113,12 +11696,14 @@ snapshots:
csstype@3.2.3: {}
- dargs@8.1.0: {}
-
db0@0.3.4(better-sqlite3@12.6.2):
optionalDependencies:
better-sqlite3: 12.6.2
+ db0@0.3.4(better-sqlite3@12.8.0):
+ optionalDependencies:
+ better-sqlite3: 12.8.0
+
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -10139,7 +11724,7 @@ snapshots:
default-browser-id@5.0.1: {}
- default-browser@5.4.0:
+ default-browser@5.5.0:
dependencies:
bundle-name: 4.1.0
default-browser-id: 5.0.1
@@ -10168,14 +11753,14 @@ snapshots:
detect-libc@2.1.2: {}
- devalue@5.6.2: {}
+ devalue@5.6.3: {}
+
+ devalue@5.6.4: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
- dfa@1.2.0: {}
-
diff3@0.0.3: {}
diff@8.0.3: {}
@@ -10200,15 +11785,13 @@ snapshots:
dot-prop@10.1.0:
dependencies:
- type-fest: 5.4.3
+ type-fest: 5.4.4
dot-prop@5.3.0:
dependencies:
is-obj: 2.0.0
- dotenv@16.6.1: {}
-
- dotenv@17.2.3: {}
+ dotenv@17.3.1: {}
dunder-proto@1.0.1:
dependencies:
@@ -10222,7 +11805,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.283: {}
+ electron-to-chromium@1.5.307: {}
embla-carousel-auto-height@8.6.0(embla-carousel@8.6.0):
dependencies:
@@ -10248,11 +11831,11 @@ snapshots:
dependencies:
embla-carousel: 8.6.0
- embla-carousel-vue@8.6.0(vue@3.5.27(typescript@5.9.3)):
+ embla-carousel-vue@8.6.0(vue@3.5.30(typescript@5.9.3)):
dependencies:
embla-carousel: 8.6.0
embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0)
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
embla-carousel-wheel-gestures@8.1.0(embla-carousel@8.6.0):
dependencies:
@@ -10289,7 +11872,7 @@ snapshots:
engine.io-parser@5.2.3: {}
- enhanced-resolve@5.18.4:
+ enhanced-resolve@5.20.0:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.0
@@ -10349,34 +11932,63 @@ snapshots:
'@esbuild/win32-ia32': 0.25.12
'@esbuild/win32-x64': 0.25.12
- esbuild@0.27.2:
+ esbuild@0.27.3:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.3
+ '@esbuild/android-arm': 0.27.3
+ '@esbuild/android-arm64': 0.27.3
+ '@esbuild/android-x64': 0.27.3
+ '@esbuild/darwin-arm64': 0.27.3
+ '@esbuild/darwin-x64': 0.27.3
+ '@esbuild/freebsd-arm64': 0.27.3
+ '@esbuild/freebsd-x64': 0.27.3
+ '@esbuild/linux-arm': 0.27.3
+ '@esbuild/linux-arm64': 0.27.3
+ '@esbuild/linux-ia32': 0.27.3
+ '@esbuild/linux-loong64': 0.27.3
+ '@esbuild/linux-mips64el': 0.27.3
+ '@esbuild/linux-ppc64': 0.27.3
+ '@esbuild/linux-riscv64': 0.27.3
+ '@esbuild/linux-s390x': 0.27.3
+ '@esbuild/linux-x64': 0.27.3
+ '@esbuild/netbsd-arm64': 0.27.3
+ '@esbuild/netbsd-x64': 0.27.3
+ '@esbuild/openbsd-arm64': 0.27.3
+ '@esbuild/openbsd-x64': 0.27.3
+ '@esbuild/openharmony-arm64': 0.27.3
+ '@esbuild/sunos-x64': 0.27.3
+ '@esbuild/win32-arm64': 0.27.3
+ '@esbuild/win32-ia32': 0.27.3
+ '@esbuild/win32-x64': 0.27.3
+
+ esbuild@0.27.4:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.2
- '@esbuild/android-arm': 0.27.2
- '@esbuild/android-arm64': 0.27.2
- '@esbuild/android-x64': 0.27.2
- '@esbuild/darwin-arm64': 0.27.2
- '@esbuild/darwin-x64': 0.27.2
- '@esbuild/freebsd-arm64': 0.27.2
- '@esbuild/freebsd-x64': 0.27.2
- '@esbuild/linux-arm': 0.27.2
- '@esbuild/linux-arm64': 0.27.2
- '@esbuild/linux-ia32': 0.27.2
- '@esbuild/linux-loong64': 0.27.2
- '@esbuild/linux-mips64el': 0.27.2
- '@esbuild/linux-ppc64': 0.27.2
- '@esbuild/linux-riscv64': 0.27.2
- '@esbuild/linux-s390x': 0.27.2
- '@esbuild/linux-x64': 0.27.2
- '@esbuild/netbsd-arm64': 0.27.2
- '@esbuild/netbsd-x64': 0.27.2
- '@esbuild/openbsd-arm64': 0.27.2
- '@esbuild/openbsd-x64': 0.27.2
- '@esbuild/openharmony-arm64': 0.27.2
- '@esbuild/sunos-x64': 0.27.2
- '@esbuild/win32-arm64': 0.27.2
- '@esbuild/win32-ia32': 0.27.2
- '@esbuild/win32-x64': 0.27.2
+ '@esbuild/aix-ppc64': 0.27.4
+ '@esbuild/android-arm': 0.27.4
+ '@esbuild/android-arm64': 0.27.4
+ '@esbuild/android-x64': 0.27.4
+ '@esbuild/darwin-arm64': 0.27.4
+ '@esbuild/darwin-x64': 0.27.4
+ '@esbuild/freebsd-arm64': 0.27.4
+ '@esbuild/freebsd-x64': 0.27.4
+ '@esbuild/linux-arm': 0.27.4
+ '@esbuild/linux-arm64': 0.27.4
+ '@esbuild/linux-ia32': 0.27.4
+ '@esbuild/linux-loong64': 0.27.4
+ '@esbuild/linux-mips64el': 0.27.4
+ '@esbuild/linux-ppc64': 0.27.4
+ '@esbuild/linux-riscv64': 0.27.4
+ '@esbuild/linux-s390x': 0.27.4
+ '@esbuild/linux-x64': 0.27.4
+ '@esbuild/netbsd-arm64': 0.27.4
+ '@esbuild/netbsd-x64': 0.27.4
+ '@esbuild/openbsd-arm64': 0.27.4
+ '@esbuild/openbsd-x64': 0.27.4
+ '@esbuild/openharmony-arm64': 0.27.4
+ '@esbuild/sunos-x64': 0.27.4
+ '@esbuild/win32-arm64': 0.27.4
+ '@esbuild/win32-ia32': 0.27.4
+ '@esbuild/win32-x64': 0.27.4
escalade@3.2.0: {}
@@ -10396,90 +12008,89 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-config-flat-gitignore@2.1.0(eslint@9.39.2(jiti@2.6.1)):
+ eslint-config-flat-gitignore@2.2.1(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- '@eslint/compat': 1.4.1(eslint@9.39.2(jiti@2.6.1))
- eslint: 9.39.2(jiti@2.6.1)
+ '@eslint/compat': 2.0.3(eslint@10.1.0(jiti@2.6.1))
+ eslint: 10.1.0(jiti@2.6.1)
- eslint-flat-config-utils@3.0.0:
+ eslint-flat-config-utils@3.0.2:
dependencies:
- '@eslint/config-helpers': 0.5.2
+ '@eslint/config-helpers': 0.5.3
pathe: 2.0.3
eslint-import-context@0.1.9(unrs-resolver@1.11.1):
dependencies:
- get-tsconfig: 4.13.1
+ get-tsconfig: 4.13.6
stable-hash-x: 0.2.0
optionalDependencies:
unrs-resolver: 1.11.1
- eslint-merge-processors@2.0.0(eslint@9.39.2(jiti@2.6.1)):
+ eslint-merge-processors@2.0.0(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
- eslint-plugin-import-lite@0.5.0(eslint@9.39.2(jiti@2.6.1)):
+ eslint-plugin-import-lite@0.5.2(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
- eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)):
+ eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- '@typescript-eslint/types': 8.54.0
+ '@package-json/types': 0.0.12
+ '@typescript-eslint/types': 8.57.0
comment-parser: 1.4.5
debug: 4.4.3
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
is-glob: 4.0.3
- minimatch: 10.1.1
- semver: 7.7.3
+ minimatch: 10.2.4
+ semver: 7.7.4
stable-hash-x: 0.2.0
unrs-resolver: 1.11.1
optionalDependencies:
- '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
- eslint-plugin-jsdoc@62.5.0(eslint@9.39.2(jiti@2.6.1)):
+ eslint-plugin-jsdoc@62.8.0(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- '@es-joy/jsdoccomment': 0.83.0
+ '@es-joy/jsdoccomment': 0.84.0
'@es-joy/resolve.exports': 1.2.0
are-docs-informative: 0.0.2
comment-parser: 1.4.5
debug: 4.4.3
escape-string-regexp: 4.0.0
- eslint: 9.39.2(jiti@2.6.1)
- espree: 11.1.0
+ eslint: 10.1.0(jiti@2.6.1)
+ espree: 11.2.0
esquery: 1.7.0
html-entities: 2.6.0
object-deep-merge: 2.0.0
parse-imports-exports: 0.2.4
- semver: 7.7.3
+ semver: 7.7.4
spdx-expression-parse: 4.0.0
to-valid-identifier: 1.0.0
transitivePeerDependencies:
- supports-color
- eslint-plugin-regexp@3.0.0(eslint@9.39.2(jiti@2.6.1)):
+ eslint-plugin-regexp@3.1.0(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
comment-parser: 1.4.5
- eslint: 9.39.2(jiti@2.6.1)
- jsdoc-type-pratt-parser: 7.1.0
+ eslint: 10.1.0(jiti@2.6.1)
+ jsdoc-type-pratt-parser: 7.1.1
refa: 0.12.1
regexp-ast-analysis: 0.7.1
scslre: 0.3.0
- eslint-plugin-unicorn@62.0.0(eslint@9.39.2(jiti@2.6.1)):
+ eslint-plugin-unicorn@63.0.0(eslint@10.1.0(jiti@2.6.1)):
dependencies:
'@babel/helper-validator-identifier': 7.28.5
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
- '@eslint/plugin-kit': 0.4.1
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
change-case: 5.4.4
ci-info: 4.4.0
clean-regexp: 1.0.0
core-js-compat: 3.48.0
- eslint: 9.39.2(jiti@2.6.1)
- esquery: 1.7.0
+ eslint: 10.1.0(jiti@2.6.1)
find-up-simple: 1.0.1
globals: 16.5.0
indent-string: 5.0.0
@@ -10488,36 +12099,38 @@ snapshots:
pluralize: 8.0.0
regexp-tree: 0.1.27
regjsparser: 0.13.0
- semver: 7.7.3
+ semver: 7.7.4
strip-indent: 4.1.1
- eslint-plugin-vue@10.7.0(@stylistic/eslint-plugin@5.7.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))):
+ eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1)))(@typescript-eslint/parser@8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3))(eslint@10.1.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1))):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
- eslint: 9.39.2(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
+ eslint: 10.1.0(jiti@2.6.1)
natural-compare: 1.4.0
nth-check: 2.1.1
postcss-selector-parser: 7.1.1
- semver: 7.7.3
- vue-eslint-parser: 10.2.0(eslint@9.39.2(jiti@2.6.1))
+ semver: 7.7.4
+ vue-eslint-parser: 10.4.0(eslint@10.1.0(jiti@2.6.1))
xml-name-validator: 4.0.0
optionalDependencies:
- '@stylistic/eslint-plugin': 5.7.1(eslint@9.39.2(jiti@2.6.1))
- '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
+ '@stylistic/eslint-plugin': 5.10.0(eslint@10.1.0(jiti@2.6.1))
+ '@typescript-eslint/parser': 8.57.0(eslint@10.1.0(jiti@2.6.1))(typescript@5.9.3)
- eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.27)(eslint@9.39.2(jiti@2.6.1)):
+ eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.30)(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- '@vue/compiler-sfc': 3.5.27
- eslint: 9.39.2(jiti@2.6.1)
+ '@vue/compiler-sfc': 3.5.30
+ eslint: 10.1.0(jiti@2.6.1)
- eslint-scope@8.4.0:
+ eslint-scope@9.1.2:
dependencies:
+ '@types/esrecurse': 4.3.1
+ '@types/estree': 1.0.8
esrecurse: 4.3.0
estraverse: 5.3.0
- eslint-typegen@2.3.0(eslint@9.39.2(jiti@2.6.1)):
+ eslint-typegen@2.3.1(eslint@10.1.0(jiti@2.6.1)):
dependencies:
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
json-schema-to-typescript-lite: 15.0.0
ohash: 2.0.11
@@ -10525,30 +12138,27 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint-visitor-keys@5.0.0: {}
+ eslint-visitor-keys@5.0.1: {}
- eslint@9.39.2(jiti@2.6.1):
+ eslint@10.1.0(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
- '@eslint/config-array': 0.21.1
- '@eslint/config-helpers': 0.4.2
- '@eslint/core': 0.17.0
- '@eslint/eslintrc': 3.3.3
- '@eslint/js': 9.39.2
- '@eslint/plugin-kit': 0.4.1
+ '@eslint/config-array': 0.23.3
+ '@eslint/config-helpers': 0.5.3
+ '@eslint/core': 1.1.1
+ '@eslint/plugin-kit': 0.6.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
- ajv: 6.12.6
- chalk: 4.1.2
+ ajv: 6.14.0
cross-spawn: 7.0.6
debug: 4.4.3
escape-string-regexp: 4.0.0
- eslint-scope: 8.4.0
- eslint-visitor-keys: 4.2.1
- espree: 10.4.0
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -10559,8 +12169,7 @@ snapshots:
imurmurhash: 0.1.4
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
- lodash.merge: 4.6.2
- minimatch: 3.1.2
+ minimatch: 10.2.4
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
@@ -10570,20 +12179,20 @@ snapshots:
espree@10.4.0:
dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
eslint-visitor-keys: 4.2.1
- espree@11.1.0:
+ espree@11.2.0:
dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
- eslint-visitor-keys: 5.0.0
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ eslint-visitor-keys: 5.0.1
espree@9.6.1:
dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
eslint-visitor-keys: 3.4.3
esprima@4.0.1: {}
@@ -10654,7 +12263,7 @@ snapshots:
fast-levenshtein@2.0.6: {}
- fast-npm-meta@0.4.8: {}
+ fast-npm-meta@1.4.2: {}
fast-uri@3.1.0: {}
@@ -10690,52 +12299,82 @@ snapshots:
flat-cache@4.0.1:
dependencies:
- flatted: 3.3.3
+ flatted: 3.4.1
keyv: 4.5.4
flat@6.0.1: {}
- flatted@3.3.3: {}
+ flatted@3.4.1: {}
- fontaine@0.7.0:
+ fontaine@0.8.0:
dependencies:
- '@capsizecss/unpack': 3.0.1
- css-tree: 3.1.0
+ '@capsizecss/unpack': 4.0.0
+ css-tree: 3.2.1
magic-regexp: 0.10.0
magic-string: 0.30.21
pathe: 2.0.3
ufo: 1.6.3
unplugin: 2.3.11
- fontkit@2.0.4:
+ fontkitten@1.0.3:
dependencies:
- '@swc/helpers': 0.5.18
- brotli: 1.3.3
- clone: 2.1.2
- dfa: 1.2.0
- fast-deep-equal: 3.1.3
- restructure: 3.0.2
tiny-inflate: 1.0.3
- unicode-properties: 1.4.1
- unicode-trie: 2.0.0
- fontless@0.1.0(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)):
+ fontless@0.2.1(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)):
dependencies:
consola: 3.4.2
- css-tree: 3.1.0
+ css-tree: 3.2.1
defu: 6.1.4
- esbuild: 0.25.12
- fontaine: 0.7.0
+ esbuild: 0.27.3
+ fontaine: 0.8.0
jiti: 2.6.1
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ ohash: 2.0.11
+ pathe: 2.0.3
+ ufo: 1.6.3
+ unifont: 0.7.4
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)
+ optionalDependencies:
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - db0
+ - idb-keyval
+ - ioredis
+ - uploadthing
+
+ fontless@0.2.1(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)):
+ dependencies:
+ consola: 3.4.2
+ css-tree: 3.2.1
+ defu: 6.1.4
+ esbuild: 0.27.3
+ fontaine: 0.8.0
+ jiti: 2.6.1
+ lightningcss: 1.32.0
magic-string: 0.30.21
ohash: 2.0.11
pathe: 2.0.3
ufo: 1.6.3
- unifont: 0.6.0
- unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)
+ unifont: 0.7.4
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)
optionalDependencies:
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -10768,9 +12407,9 @@ snapshots:
fraction.js@5.3.4: {}
- framer-motion@12.29.2:
+ framer-motion@12.35.2:
dependencies:
- motion-dom: 12.29.2
+ motion-dom: 12.35.2
motion-utils: 12.29.2
tslib: 2.8.1
@@ -10785,6 +12424,8 @@ snapshots:
fuse.js@7.1.0: {}
+ fzf@0.5.2: {}
+
gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
@@ -10811,7 +12452,7 @@ snapshots:
get-stream@8.0.1: {}
- get-tsconfig@4.13.1:
+ get-tsconfig@4.13.6:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -10821,14 +12462,18 @@ snapshots:
consola: 3.4.2
defu: 6.1.4
node-fetch-native: 1.6.7
- nypm: 0.6.4
+ nypm: 0.6.5
pathe: 2.0.3
- git-raw-commits@4.0.0:
+ giget@3.1.2: {}
+
+ git-raw-commits@5.0.1(conventional-commits-parser@6.3.0):
dependencies:
- dargs: 8.1.0
- meow: 12.1.1
- split2: 4.2.0
+ '@conventional-changelog/git-client': 2.6.0(conventional-commits-parser@6.3.0)
+ meow: 13.2.0
+ transitivePeerDependencies:
+ - conventional-commits-filter
+ - conventional-commits-parser
git-up@8.1.1:
dependencies:
@@ -10855,28 +12500,26 @@ snapshots:
dependencies:
foreground-child: 3.3.1
jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
+ minimatch: 9.0.9
+ minipass: 7.1.3
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@13.0.0:
+ glob@13.0.6:
dependencies:
- minimatch: 10.1.1
- minipass: 7.1.2
- path-scurry: 2.0.1
+ minimatch: 10.2.4
+ minipass: 7.1.3
+ path-scurry: 2.0.2
global-directory@4.0.1:
dependencies:
ini: 4.1.1
- globals@14.0.0: {}
-
globals@16.5.0: {}
- globals@17.3.0: {}
+ globals@17.4.0: {}
- globby@16.1.0:
+ globby@16.1.1:
dependencies:
'@sindresorhus/merge-streams': 4.0.0
fast-glob: 3.3.3
@@ -10893,7 +12536,7 @@ snapshots:
dependencies:
duplexer: 0.1.2
- h3@1.15.5:
+ h3@1.15.6:
dependencies:
cookie-es: 1.2.2
crossws: 0.3.5
@@ -10910,8 +12553,6 @@ snapshots:
rou3: 0.7.12
srvx: 0.10.1
- has-flag@4.0.0: {}
-
has-property-descriptors@1.0.2:
dependencies:
es-define-property: 1.0.1
@@ -11103,10 +12744,6 @@ snapshots:
husky@9.1.7: {}
- iconv-lite@0.4.24:
- dependencies:
- safer-buffer: 2.1.2
-
ieee754@1.2.1: {}
ignore@5.3.2: {}
@@ -11122,13 +12759,13 @@ snapshots:
import-meta-resolve@4.2.0: {}
- impound@1.0.0:
+ impound@1.1.5:
dependencies:
- exsolve: 1.0.8
- mocked-exports: 0.1.1
+ '@jridgewell/trace-mapping': 0.3.31
+ es-module-lexer: 2.0.0
pathe: 2.0.3
- unplugin: 2.3.11
- unplugin-utils: 0.2.5
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
imurmurhash@0.1.4: {}
@@ -11140,9 +12777,9 @@ snapshots:
ini@4.1.1: {}
- ioredis@5.9.2:
+ ioredis@5.10.0:
dependencies:
- '@ioredis/commands': 1.5.0
+ '@ioredis/commands': 1.5.1
cluster-key-slot: 1.1.2
debug: 4.4.3
denque: 2.1.0
@@ -11234,7 +12871,7 @@ snapshots:
dependencies:
is-docker: 2.2.1
- is-wsl@3.1.0:
+ is-wsl@3.1.1:
dependencies:
is-inside-container: 1.0.0
@@ -11248,9 +12885,9 @@ snapshots:
isexe@2.0.0: {}
- isexe@3.1.1: {}
+ isexe@3.1.5: {}
- isomorphic-git@1.36.3:
+ isomorphic-git@1.37.2:
dependencies:
async-lock: 1.4.1
clean-git-ref: 2.0.1
@@ -11282,7 +12919,7 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsdoc-type-pratt-parser@7.1.0: {}
+ jsdoc-type-pratt-parser@7.1.1: {}
jsesc@3.1.0: {}
@@ -11299,7 +12936,7 @@ snapshots:
dependencies:
'@apidevtools/json-schema-ref-parser': 11.9.3
'@types/json-schema': 7.0.15
- '@types/lodash': 4.17.23
+ '@types/lodash': 4.17.24
is-glob: 4.0.3
js-yaml: 4.1.1
lodash: 4.17.23
@@ -11317,26 +12954,22 @@ snapshots:
jsonc-eslint-parser@2.4.2:
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
eslint-visitor-keys: 3.4.3
espree: 9.6.1
- semver: 7.7.3
-
- kasi@2.0.1: {}
+ semver: 7.7.4
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
- kleur@3.0.3: {}
-
kleur@4.1.5: {}
klona@2.0.6: {}
knitwork@1.3.0: {}
- launch-editor@2.12.0:
+ launch-editor@2.13.1:
dependencies:
picocolors: 1.1.1
shell-quote: 1.8.3
@@ -11354,87 +12987,71 @@ snapshots:
dependencies:
isomorphic.js: 0.2.5
- lightningcss-android-arm64@1.30.2:
- optional: true
-
lightningcss-android-arm64@1.31.1:
optional: true
- lightningcss-darwin-arm64@1.30.2:
+ lightningcss-android-arm64@1.32.0:
optional: true
lightningcss-darwin-arm64@1.31.1:
optional: true
- lightningcss-darwin-x64@1.30.2:
+ lightningcss-darwin-arm64@1.32.0:
optional: true
lightningcss-darwin-x64@1.31.1:
optional: true
- lightningcss-freebsd-x64@1.30.2:
+ lightningcss-darwin-x64@1.32.0:
optional: true
lightningcss-freebsd-x64@1.31.1:
optional: true
- lightningcss-linux-arm-gnueabihf@1.30.2:
+ lightningcss-freebsd-x64@1.32.0:
optional: true
lightningcss-linux-arm-gnueabihf@1.31.1:
optional: true
- lightningcss-linux-arm64-gnu@1.30.2:
+ lightningcss-linux-arm-gnueabihf@1.32.0:
optional: true
lightningcss-linux-arm64-gnu@1.31.1:
optional: true
- lightningcss-linux-arm64-musl@1.30.2:
+ lightningcss-linux-arm64-gnu@1.32.0:
optional: true
lightningcss-linux-arm64-musl@1.31.1:
optional: true
- lightningcss-linux-x64-gnu@1.30.2:
+ lightningcss-linux-arm64-musl@1.32.0:
optional: true
lightningcss-linux-x64-gnu@1.31.1:
optional: true
- lightningcss-linux-x64-musl@1.30.2:
+ lightningcss-linux-x64-gnu@1.32.0:
optional: true
lightningcss-linux-x64-musl@1.31.1:
optional: true
- lightningcss-win32-arm64-msvc@1.30.2:
+ lightningcss-linux-x64-musl@1.32.0:
optional: true
lightningcss-win32-arm64-msvc@1.31.1:
optional: true
- lightningcss-win32-x64-msvc@1.30.2:
+ lightningcss-win32-arm64-msvc@1.32.0:
optional: true
lightningcss-win32-x64-msvc@1.31.1:
optional: true
- lightningcss@1.30.2:
- dependencies:
- detect-libc: 2.1.2
- optionalDependencies:
- lightningcss-android-arm64: 1.30.2
- lightningcss-darwin-arm64: 1.30.2
- lightningcss-darwin-x64: 1.30.2
- lightningcss-freebsd-x64: 1.30.2
- lightningcss-linux-arm-gnueabihf: 1.30.2
- lightningcss-linux-arm64-gnu: 1.30.2
- lightningcss-linux-arm64-musl: 1.30.2
- lightningcss-linux-x64-gnu: 1.30.2
- lightningcss-linux-x64-musl: 1.30.2
- lightningcss-win32-arm64-msvc: 1.30.2
- lightningcss-win32-x64-msvc: 1.30.2
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
lightningcss@1.31.1:
dependencies:
@@ -11452,6 +13069,22 @@ snapshots:
lightningcss-win32-arm64-msvc: 1.31.1
lightningcss-win32-x64-msvc: 1.31.1
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
lilconfig@3.1.3: {}
lines-and-columns@1.2.4: {}
@@ -11472,10 +13105,10 @@ snapshots:
crossws: 0.3.5
defu: 6.1.4
get-port-please: 3.2.0
- h3: 1.15.5
+ h3: 1.15.6
http-shutdown: 1.2.2
jiti: 2.6.1
- mlly: 1.8.0
+ mlly: 1.8.1
node-forge: 1.3.3
pathe: 1.1.2
std-env: 3.10.0
@@ -11487,7 +13120,7 @@ snapshots:
local-pkg@1.1.2:
dependencies:
- mlly: 1.8.0
+ mlly: 1.8.1
pkg-types: 2.3.0
quansync: 0.2.11
@@ -11499,25 +13132,33 @@ snapshots:
dependencies:
p-locate: 6.0.0
+ lodash.camelcase@4.3.0: {}
+
lodash.defaults@4.2.0: {}
lodash.isarguments@3.1.0: {}
- lodash.memoize@4.1.2: {}
+ lodash.kebabcase@4.1.1: {}
- lodash.merge@4.6.2: {}
+ lodash.memoize@4.1.2: {}
lodash.mergewith@4.6.2: {}
+ lodash.snakecase@4.1.1: {}
+
+ lodash.startcase@4.4.0: {}
+
lodash.uniq@4.5.0: {}
+ lodash.upperfirst@4.3.1: {}
+
lodash@4.17.23: {}
longest-streak@3.1.0: {}
lru-cache@10.4.3: {}
- lru-cache@11.2.5: {}
+ lru-cache@11.2.6: {}
lru-cache@5.1.1:
dependencies:
@@ -11527,7 +13168,7 @@ snapshots:
dependencies:
estree-walker: 3.0.3
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
regexp-tree: 0.1.27
type-level-regexp: 0.1.17
ufo: 1.6.3
@@ -11541,13 +13182,13 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
- magicast@0.5.1:
+ magicast@0.5.2:
dependencies:
'@babel/parser': 7.29.0
'@babel/types': 7.29.0
source-map-js: 1.2.1
- markdown-it@14.1.0:
+ markdown-it@14.1.1:
dependencies:
argparse: 2.0.1
entities: 4.5.0
@@ -11558,7 +13199,7 @@ snapshots:
markdown-table@3.0.4: {}
- marked@17.0.1: {}
+ marked@17.0.4: {}
math-intrinsics@1.1.0: {}
@@ -11569,7 +13210,7 @@ snapshots:
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
- mdast-util-from-markdown@2.0.2:
+ mdast-util-from-markdown@2.0.3:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
@@ -11598,7 +13239,7 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
@@ -11607,7 +13248,7 @@ snapshots:
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
'@types/mdast': 4.0.4
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
@@ -11617,7 +13258,7 @@ snapshots:
'@types/mdast': 4.0.4
devlop: 1.1.0
markdown-table: 3.0.4
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
@@ -11626,14 +13267,14 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm@3.1.0:
dependencies:
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-gfm-autolink-literal: 2.0.1
mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
@@ -11678,12 +13319,10 @@ snapshots:
mdn-data@2.0.28: {}
- mdn-data@2.12.2: {}
+ mdn-data@2.27.1: {}
mdurl@2.0.0: {}
- meow@12.1.1: {}
-
meow@13.2.0: {}
merge-stream@2.0.0: {}
@@ -11900,19 +13539,15 @@ snapshots:
minimark@0.2.0: {}
- minimatch@10.1.1:
+ minimatch@10.2.4:
dependencies:
- '@isaacs/brace-expansion': 5.0.0
+ brace-expansion: 5.0.4
- minimatch@3.1.2:
- dependencies:
- brace-expansion: 1.1.12
-
- minimatch@5.1.6:
+ minimatch@5.1.9:
dependencies:
brace-expansion: 2.0.2
- minimatch@9.0.5:
+ minimatch@9.0.9:
dependencies:
brace-expansion: 2.0.2
@@ -11922,104 +13557,207 @@ snapshots:
dependencies:
minimist: 1.2.8
- minipass@7.1.2: {}
+ minipass@7.1.3: {}
minizlib@3.1.0:
dependencies:
- minipass: 7.1.2
+ minipass: 7.1.3
mitt@3.0.1: {}
mkdirp-classic@0.5.3: {}
- mlly@1.8.0:
+ mlly@1.8.1:
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
pathe: 2.0.3
pkg-types: 1.3.1
ufo: 1.6.3
mocked-exports@0.1.1: {}
- motion-dom@12.29.2:
+ motion-dom@12.35.2:
dependencies:
motion-utils: 12.29.2
motion-utils@12.29.2: {}
- motion-v@1.10.2(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)):
+ motion-v@1.10.3(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
dependencies:
- '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3))
- framer-motion: 12.29.2
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ framer-motion: 12.35.2
hey-listen: 1.0.8
- motion-dom: 12.29.2
- vue: 3.5.27(typescript@5.9.3)
+ motion-dom: 12.35.2
+ vue: 3.5.30(typescript@5.9.3)
+ transitivePeerDependencies:
+ - '@emotion/is-prop-valid'
+ - react
+ - react-dom
+
+ mrmime@2.0.1: {}
+
+ ms@2.1.3: {}
+
+ muggle-string@0.4.1: {}
+
+ nanoid@3.3.11: {}
+
+ nanotar@0.2.1: {}
+
+ nanotar@0.3.0: {}
+
+ napi-build-utils@2.0.0: {}
+
+ napi-postinstall@0.3.4: {}
+
+ natural-compare@1.4.0: {}
+
+ nitropack@2.13.1(better-sqlite3@12.6.2):
+ dependencies:
+ '@cloudflare/kv-asset-handler': 0.4.2
+ '@rollup/plugin-alias': 6.0.0(rollup@4.59.0)
+ '@rollup/plugin-commonjs': 29.0.2(rollup@4.59.0)
+ '@rollup/plugin-inject': 5.0.5(rollup@4.59.0)
+ '@rollup/plugin-json': 6.1.0(rollup@4.59.0)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.59.0)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.59.0)
+ '@rollup/plugin-terser': 0.4.4(rollup@4.59.0)
+ '@vercel/nft': 1.3.2(rollup@4.59.0)
+ archiver: 7.0.1
+ c12: 3.3.3(magicast@0.5.2)
+ chokidar: 5.0.0
+ citty: 0.1.6
+ compatx: 0.2.0
+ confbox: 0.2.4
+ consola: 3.4.2
+ cookie-es: 2.0.0
+ croner: 9.1.0
+ crossws: 0.3.5
+ db0: 0.3.4(better-sqlite3@12.6.2)
+ defu: 6.1.4
+ destr: 2.0.5
+ dot-prop: 10.1.0
+ esbuild: 0.27.3
+ escape-string-regexp: 5.0.0
+ etag: 1.8.1
+ exsolve: 1.0.8
+ globby: 16.1.1
+ gzip-size: 7.0.0
+ h3: 1.15.6
+ hookable: 5.5.3
+ httpxy: 0.1.7
+ ioredis: 5.10.0
+ jiti: 2.6.1
+ klona: 2.0.6
+ knitwork: 1.3.0
+ listhen: 1.9.0
+ magic-string: 0.30.21
+ magicast: 0.5.2
+ mime: 4.1.0
+ mlly: 1.8.1
+ node-fetch-native: 1.6.7
+ node-mock-http: 1.0.4
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.0
+ pretty-bytes: 7.1.0
+ radix3: 1.1.2
+ rollup: 4.59.0
+ rollup-plugin-visualizer: 6.0.11(rollup@4.59.0)
+ scule: 1.3.0
+ semver: 7.7.4
+ serve-placeholder: 2.0.2
+ serve-static: 2.2.1
+ source-map: 0.7.6
+ std-env: 3.10.0
+ ufo: 1.6.3
+ ultrahtml: 1.6.0
+ uncrypto: 0.1.3
+ unctx: 2.5.0
+ unenv: 2.0.0-rc.24
+ unimport: 5.7.0
+ unplugin-utils: 0.3.1
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)
+ untyped: 2.0.0
+ unwasm: 0.5.3
+ youch: 4.1.0
+ youch-core: 0.3.3
transitivePeerDependencies:
- - '@emotion/is-prop-valid'
- - react
- - react-dom
-
- mrmime@2.0.1: {}
-
- ms@2.1.3: {}
-
- muggle-string@0.4.1: {}
-
- nanoid@3.3.11: {}
-
- nanoid@5.1.6: {}
-
- nanotar@0.2.0: {}
-
- napi-build-utils@2.0.0: {}
-
- napi-postinstall@0.3.4: {}
-
- natural-compare@1.4.0: {}
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - drizzle-orm
+ - encoding
+ - idb-keyval
+ - mysql2
+ - react-native-b4a
+ - rolldown
+ - sqlite3
+ - supports-color
+ - uploadthing
- nitropack@2.13.1(better-sqlite3@12.6.2):
+ nitropack@2.13.1(better-sqlite3@12.8.0):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.2
- '@rollup/plugin-alias': 6.0.0(rollup@4.57.1)
- '@rollup/plugin-commonjs': 29.0.0(rollup@4.57.1)
- '@rollup/plugin-inject': 5.0.5(rollup@4.57.1)
- '@rollup/plugin-json': 6.1.0(rollup@4.57.1)
- '@rollup/plugin-node-resolve': 16.0.3(rollup@4.57.1)
- '@rollup/plugin-replace': 6.0.3(rollup@4.57.1)
- '@rollup/plugin-terser': 0.4.4(rollup@4.57.1)
- '@vercel/nft': 1.3.0(rollup@4.57.1)
+ '@rollup/plugin-alias': 6.0.0(rollup@4.59.0)
+ '@rollup/plugin-commonjs': 29.0.2(rollup@4.59.0)
+ '@rollup/plugin-inject': 5.0.5(rollup@4.59.0)
+ '@rollup/plugin-json': 6.1.0(rollup@4.59.0)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.59.0)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.59.0)
+ '@rollup/plugin-terser': 0.4.4(rollup@4.59.0)
+ '@vercel/nft': 1.3.2(rollup@4.59.0)
archiver: 7.0.1
- c12: 3.3.3(magicast@0.5.1)
+ c12: 3.3.3(magicast@0.5.2)
chokidar: 5.0.0
citty: 0.1.6
compatx: 0.2.0
- confbox: 0.2.2
+ confbox: 0.2.4
consola: 3.4.2
cookie-es: 2.0.0
croner: 9.1.0
crossws: 0.3.5
- db0: 0.3.4(better-sqlite3@12.6.2)
+ db0: 0.3.4(better-sqlite3@12.8.0)
defu: 6.1.4
destr: 2.0.5
dot-prop: 10.1.0
- esbuild: 0.27.2
+ esbuild: 0.27.3
escape-string-regexp: 5.0.0
etag: 1.8.1
exsolve: 1.0.8
- globby: 16.1.0
+ globby: 16.1.1
gzip-size: 7.0.0
- h3: 1.15.5
+ h3: 1.15.6
hookable: 5.5.3
httpxy: 0.1.7
- ioredis: 5.9.2
+ ioredis: 5.10.0
jiti: 2.6.1
klona: 2.0.6
knitwork: 1.3.0
listhen: 1.9.0
magic-string: 0.30.21
- magicast: 0.5.1
+ magicast: 0.5.2
mime: 4.1.0
- mlly: 1.8.0
+ mlly: 1.8.1
node-fetch-native: 1.6.7
node-mock-http: 1.0.4
ofetch: 1.5.1
@@ -12029,10 +13767,10 @@ snapshots:
pkg-types: 2.3.0
pretty-bytes: 7.1.0
radix3: 1.1.2
- rollup: 4.57.1
- rollup-plugin-visualizer: 6.0.5(rollup@4.57.1)
+ rollup: 4.59.0
+ rollup-plugin-visualizer: 6.0.11(rollup@4.59.0)
scule: 1.3.0
- semver: 7.7.3
+ semver: 7.7.4
serve-placeholder: 2.0.2
serve-static: 2.2.1
source-map: 0.7.6
@@ -12042,12 +13780,12 @@ snapshots:
uncrypto: 0.1.3
unctx: 2.5.0
unenv: 2.0.0-rc.24
- unimport: 5.6.0
+ unimport: 5.7.0
unplugin-utils: 0.3.1
- unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)
+ unstorage: 1.17.4(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)
untyped: 2.0.0
unwasm: 0.5.3
- youch: 4.1.0-beta.13
+ youch: 4.1.0
youch-core: 0.3.3
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -12068,6 +13806,7 @@ snapshots:
- '@vercel/kv'
- aws4fetch
- bare-abort-controller
+ - bare-buffer
- better-sqlite3
- drizzle-orm
- encoding
@@ -12079,9 +13818,9 @@ snapshots:
- supports-color
- uploadthing
- node-abi@3.87.0:
+ node-abi@3.88.0:
dependencies:
- semver: 7.7.3
+ semver: 7.7.4
node-addon-api@7.1.1: {}
@@ -12104,7 +13843,7 @@ snapshots:
node-mock-http@1.0.4: {}
- node-releases@2.0.27: {}
+ node-releases@2.0.36: {}
nopt@8.1.0:
dependencies:
@@ -12125,80 +13864,203 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nuxt-component-meta@0.17.1(magicast@0.5.1):
+ nuxt-component-meta@0.17.2(magicast@0.5.2):
dependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
citty: 0.1.6
- mlly: 1.8.0
+ mlly: 1.8.1
ohash: 2.0.11
scule: 1.3.0
typescript: 5.9.3
ufo: 1.6.3
- vue-component-meta: 3.2.4(typescript@5.9.3)
+ vue-component-meta: 3.2.5(typescript@5.9.3)
transitivePeerDependencies:
- magicast
nuxt-define@1.0.0: {}
- nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2):
- dependencies:
- '@dxup/nuxt': 0.3.2(magicast@0.5.1)
- '@nuxt/cli': 3.32.0(cac@6.7.14)(magicast@0.5.1)
- '@nuxt/devtools': 3.1.1(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@nuxt/nitro-server': 4.3.0(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2)(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)
- '@nuxt/schema': 4.3.0
- '@nuxt/telemetry': 2.6.6(magicast@0.5.1)
- '@nuxt/vite-builder': 4.3.0(@types/node@25.2.0)(eslint@9.39.2(jiti@2.6.1))(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(lightningcss@1.31.1)(magicast@0.5.1)(meow@13.2.0)(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3))(vue@3.5.27(typescript@5.9.3))(yaml@2.8.2)
- '@unhead/vue': 2.1.2(vue@3.5.27(typescript@5.9.3))
- '@vue/shared': 3.5.27
- c12: 3.3.3(magicast@0.5.1)
+ nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2):
+ dependencies:
+ '@dxup/nuxt': 0.3.2(magicast@0.5.2)
+ '@nuxt/cli': 3.34.0(@nuxt/schema@4.3.1)(cac@6.7.14)(magicast@0.5.2)
+ '@nuxt/devtools': 3.2.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@nuxt/nitro-server': 4.3.1(better-sqlite3@12.6.2)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)
+ '@nuxt/schema': 4.3.1
+ '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.3.1(magicast@0.5.2))
+ '@nuxt/vite-builder': 4.3.1(@types/node@25.2.0)(eslint@10.1.0(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)
+ '@unhead/vue': 2.1.12(vue@3.5.30(typescript@5.9.3))
+ '@vue/shared': 3.5.30
+ c12: 3.3.3(magicast@0.5.2)
chokidar: 5.0.0
compatx: 0.2.0
consola: 3.4.2
cookie-es: 2.0.0
defu: 6.1.4
destr: 2.0.5
- devalue: 5.6.2
+ devalue: 5.6.3
errx: 0.1.0
escape-string-regexp: 5.0.0
exsolve: 1.0.8
- h3: 1.15.5
+ h3: 1.15.6
hookable: 5.5.3
ignore: 7.0.5
- impound: 1.0.0
+ impound: 1.1.5
jiti: 2.6.1
klona: 2.0.6
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
- nanotar: 0.2.0
- nypm: 0.6.4
+ mlly: 1.8.1
+ nanotar: 0.2.1
+ nypm: 0.6.5
ofetch: 1.5.1
ohash: 2.0.11
on-change: 6.0.2
- oxc-minify: 0.110.0
- oxc-parser: 0.110.0
- oxc-transform: 0.110.0
- oxc-walker: 0.7.0(oxc-parser@0.110.0)
+ oxc-minify: 0.112.0
+ oxc-parser: 0.112.0
+ oxc-transform: 0.112.0
+ oxc-walker: 0.7.0(oxc-parser@0.112.0)
pathe: 2.0.3
perfect-debounce: 2.1.0
pkg-types: 2.3.0
rou3: 0.7.12
scule: 1.3.0
- semver: 7.7.3
+ semver: 7.7.4
std-env: 3.10.0
tinyglobby: 0.2.15
ufo: 1.6.3
ultrahtml: 1.6.0
uncrypto: 0.1.3
unctx: 2.5.0
- unimport: 5.6.0
- unplugin: 2.3.11
- unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))
+ unimport: 5.7.0
+ unplugin: 3.0.0
+ unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
+ untyped: 2.0.0
+ vue: 3.5.30(typescript@5.9.3)
+ vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
+ optionalDependencies:
+ '@parcel/watcher': 2.5.6
+ '@types/node': 25.2.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@biomejs/biome'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vitejs/devtools'
+ - '@vue/compiler-sfc'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - bufferutil
+ - cac
+ - commander
+ - db0
+ - drizzle-orm
+ - encoding
+ - eslint
+ - idb-keyval
+ - ioredis
+ - less
+ - lightningcss
+ - magicast
+ - meow
+ - mysql2
+ - optionator
+ - oxlint
+ - react-native-b4a
+ - rolldown
+ - rollup
+ - sass
+ - sass-embedded
+ - sqlite3
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - vite
+ - vls
+ - vti
+ - vue-tsc
+ - xml2js
+ - yaml
+
+ nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2):
+ dependencies:
+ '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@5.9.3)
+ '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)
+ '@nuxt/devtools': 3.2.3(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(better-sqlite3@12.8.0)(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)
+ '@nuxt/schema': 4.4.2
+ '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.4.2(magicast@0.5.2))
+ '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.2.0)(eslint@10.1.0(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.2.0)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.8.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.8.0))(eslint@10.1.0(jiti@2.6.1))(ioredis@5.10.0)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vue-tsc@3.2.6(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))(yaml@2.8.2)
+ '@unhead/vue': 2.1.12(vue@3.5.30(typescript@5.9.3))
+ '@vue/shared': 3.5.30
+ c12: 3.3.3(magicast@0.5.2)
+ chokidar: 5.0.0
+ compatx: 0.2.0
+ consola: 3.4.2
+ cookie-es: 2.0.0
+ defu: 6.1.4
+ devalue: 5.6.4
+ errx: 0.1.0
+ escape-string-regexp: 5.0.0
+ exsolve: 1.0.8
+ hookable: 6.0.1
+ ignore: 7.0.5
+ impound: 1.1.5
+ jiti: 2.6.1
+ klona: 2.0.6
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.1
+ nanotar: 0.3.0
+ nypm: 0.6.5
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ on-change: 6.0.2
+ oxc-minify: 0.117.0
+ oxc-parser: 0.117.0
+ oxc-transform: 0.117.0
+ oxc-walker: 0.7.0(oxc-parser@0.117.0)
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ picomatch: 4.0.3
+ pkg-types: 2.3.0
+ rou3: 0.8.1
+ scule: 1.3.0
+ semver: 7.7.4
+ std-env: 4.0.0
+ tinyglobby: 0.2.15
+ ufo: 1.6.3
+ ultrahtml: 1.6.0
+ uncrypto: 0.1.3
+ unctx: 2.5.0
+ unimport: 6.0.1
+ unplugin: 3.0.0
+ unrouting: 0.1.7
untyped: 2.0.0
- vue: 3.5.27(typescript@5.9.3)
- vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3))
+ vue: 3.5.30(typescript@5.9.3)
+ vue-router: 5.0.3(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3))
optionalDependencies:
'@parcel/watcher': 2.5.6
'@types/node': 25.2.0
@@ -12209,13 +14071,18 @@ snapshots:
- '@azure/identity'
- '@azure/keyvault-secrets'
- '@azure/storage-blob'
+ - '@babel/core'
+ - '@babel/plugin-proposal-decorators'
+ - '@babel/plugin-syntax-jsx'
- '@biomejs/biome'
- '@capacitor/preferences'
- '@deno/kv'
- '@electric-sql/pglite'
- '@libsql/client'
- '@netlify/blobs'
+ - '@pinia/colada'
- '@planetscale/database'
+ - '@rollup/plugin-babel'
- '@upstash/redis'
- '@vercel/blob'
- '@vercel/functions'
@@ -12224,6 +14091,7 @@ snapshots:
- '@vue/compiler-sfc'
- aws4fetch
- bare-abort-controller
+ - bare-buffer
- better-sqlite3
- bufferutil
- cac
@@ -12241,9 +14109,11 @@ snapshots:
- mysql2
- optionator
- oxlint
+ - pinia
- react-native-b4a
- rolldown
- rollup
+ - rollup-plugin-visualizer
- sass
- sass-embedded
- sqlite3
@@ -12263,9 +14133,9 @@ snapshots:
- xml2js
- yaml
- nypm@0.6.4:
+ nypm@0.6.5:
dependencies:
- citty: 0.2.0
+ citty: 0.2.1
pathe: 2.0.3
tinyexec: 1.0.2
@@ -12279,6 +14149,8 @@ snapshots:
node-fetch-native: 1.6.7
ufo: 1.6.3
+ ofetch@2.0.0-alpha.3: {}
+
ohash@2.0.11: {}
on-change@6.0.2: {}
@@ -12305,7 +14177,7 @@ snapshots:
open@10.2.0:
dependencies:
- default-browser: 5.4.0
+ default-browser: 5.5.0
define-lazy-prop: 3.0.0
is-inside-container: 1.0.0
wsl-utils: 0.1.0
@@ -12327,53 +14199,101 @@ snapshots:
orderedmap@2.1.1: {}
- oxc-minify@0.110.0:
+ oxc-minify@0.112.0:
optionalDependencies:
- '@oxc-minify/binding-android-arm-eabi': 0.110.0
- '@oxc-minify/binding-android-arm64': 0.110.0
- '@oxc-minify/binding-darwin-arm64': 0.110.0
- '@oxc-minify/binding-darwin-x64': 0.110.0
- '@oxc-minify/binding-freebsd-x64': 0.110.0
- '@oxc-minify/binding-linux-arm-gnueabihf': 0.110.0
- '@oxc-minify/binding-linux-arm-musleabihf': 0.110.0
- '@oxc-minify/binding-linux-arm64-gnu': 0.110.0
- '@oxc-minify/binding-linux-arm64-musl': 0.110.0
- '@oxc-minify/binding-linux-ppc64-gnu': 0.110.0
- '@oxc-minify/binding-linux-riscv64-gnu': 0.110.0
- '@oxc-minify/binding-linux-riscv64-musl': 0.110.0
- '@oxc-minify/binding-linux-s390x-gnu': 0.110.0
- '@oxc-minify/binding-linux-x64-gnu': 0.110.0
- '@oxc-minify/binding-linux-x64-musl': 0.110.0
- '@oxc-minify/binding-openharmony-arm64': 0.110.0
- '@oxc-minify/binding-wasm32-wasi': 0.110.0
- '@oxc-minify/binding-win32-arm64-msvc': 0.110.0
- '@oxc-minify/binding-win32-ia32-msvc': 0.110.0
- '@oxc-minify/binding-win32-x64-msvc': 0.110.0
-
- oxc-parser@0.110.0:
- dependencies:
- '@oxc-project/types': 0.110.0
+ '@oxc-minify/binding-android-arm-eabi': 0.112.0
+ '@oxc-minify/binding-android-arm64': 0.112.0
+ '@oxc-minify/binding-darwin-arm64': 0.112.0
+ '@oxc-minify/binding-darwin-x64': 0.112.0
+ '@oxc-minify/binding-freebsd-x64': 0.112.0
+ '@oxc-minify/binding-linux-arm-gnueabihf': 0.112.0
+ '@oxc-minify/binding-linux-arm-musleabihf': 0.112.0
+ '@oxc-minify/binding-linux-arm64-gnu': 0.112.0
+ '@oxc-minify/binding-linux-arm64-musl': 0.112.0
+ '@oxc-minify/binding-linux-ppc64-gnu': 0.112.0
+ '@oxc-minify/binding-linux-riscv64-gnu': 0.112.0
+ '@oxc-minify/binding-linux-riscv64-musl': 0.112.0
+ '@oxc-minify/binding-linux-s390x-gnu': 0.112.0
+ '@oxc-minify/binding-linux-x64-gnu': 0.112.0
+ '@oxc-minify/binding-linux-x64-musl': 0.112.0
+ '@oxc-minify/binding-openharmony-arm64': 0.112.0
+ '@oxc-minify/binding-wasm32-wasi': 0.112.0
+ '@oxc-minify/binding-win32-arm64-msvc': 0.112.0
+ '@oxc-minify/binding-win32-ia32-msvc': 0.112.0
+ '@oxc-minify/binding-win32-x64-msvc': 0.112.0
+
+ oxc-minify@0.117.0:
optionalDependencies:
- '@oxc-parser/binding-android-arm-eabi': 0.110.0
- '@oxc-parser/binding-android-arm64': 0.110.0
- '@oxc-parser/binding-darwin-arm64': 0.110.0
- '@oxc-parser/binding-darwin-x64': 0.110.0
- '@oxc-parser/binding-freebsd-x64': 0.110.0
- '@oxc-parser/binding-linux-arm-gnueabihf': 0.110.0
- '@oxc-parser/binding-linux-arm-musleabihf': 0.110.0
- '@oxc-parser/binding-linux-arm64-gnu': 0.110.0
- '@oxc-parser/binding-linux-arm64-musl': 0.110.0
- '@oxc-parser/binding-linux-ppc64-gnu': 0.110.0
- '@oxc-parser/binding-linux-riscv64-gnu': 0.110.0
- '@oxc-parser/binding-linux-riscv64-musl': 0.110.0
- '@oxc-parser/binding-linux-s390x-gnu': 0.110.0
- '@oxc-parser/binding-linux-x64-gnu': 0.110.0
- '@oxc-parser/binding-linux-x64-musl': 0.110.0
- '@oxc-parser/binding-openharmony-arm64': 0.110.0
- '@oxc-parser/binding-wasm32-wasi': 0.110.0
- '@oxc-parser/binding-win32-arm64-msvc': 0.110.0
- '@oxc-parser/binding-win32-ia32-msvc': 0.110.0
- '@oxc-parser/binding-win32-x64-msvc': 0.110.0
+ '@oxc-minify/binding-android-arm-eabi': 0.117.0
+ '@oxc-minify/binding-android-arm64': 0.117.0
+ '@oxc-minify/binding-darwin-arm64': 0.117.0
+ '@oxc-minify/binding-darwin-x64': 0.117.0
+ '@oxc-minify/binding-freebsd-x64': 0.117.0
+ '@oxc-minify/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-minify/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-minify/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-arm64-musl': 0.117.0
+ '@oxc-minify/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-minify/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-minify/binding-linux-x64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-x64-musl': 0.117.0
+ '@oxc-minify/binding-openharmony-arm64': 0.117.0
+ '@oxc-minify/binding-wasm32-wasi': 0.117.0
+ '@oxc-minify/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-minify/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-minify/binding-win32-x64-msvc': 0.117.0
+
+ oxc-parser@0.112.0:
+ dependencies:
+ '@oxc-project/types': 0.112.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.112.0
+ '@oxc-parser/binding-android-arm64': 0.112.0
+ '@oxc-parser/binding-darwin-arm64': 0.112.0
+ '@oxc-parser/binding-darwin-x64': 0.112.0
+ '@oxc-parser/binding-freebsd-x64': 0.112.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.112.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.112.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.112.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.112.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.112.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.112.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.112.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.112.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.112.0
+ '@oxc-parser/binding-linux-x64-musl': 0.112.0
+ '@oxc-parser/binding-openharmony-arm64': 0.112.0
+ '@oxc-parser/binding-wasm32-wasi': 0.112.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.112.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.112.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.112.0
+
+ oxc-parser@0.117.0:
+ dependencies:
+ '@oxc-project/types': 0.117.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.117.0
+ '@oxc-parser/binding-android-arm64': 0.117.0
+ '@oxc-parser/binding-darwin-arm64': 0.117.0
+ '@oxc-parser/binding-darwin-x64': 0.117.0
+ '@oxc-parser/binding-freebsd-x64': 0.117.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.117.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-x64-musl': 0.117.0
+ '@oxc-parser/binding-openharmony-arm64': 0.117.0
+ '@oxc-parser/binding-wasm32-wasi': 0.117.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.117.0
oxc-parser@0.95.0:
dependencies:
@@ -12395,28 +14315,51 @@ snapshots:
'@oxc-parser/binding-win32-arm64-msvc': 0.95.0
'@oxc-parser/binding-win32-x64-msvc': 0.95.0
- oxc-transform@0.110.0:
+ oxc-transform@0.112.0:
optionalDependencies:
- '@oxc-transform/binding-android-arm-eabi': 0.110.0
- '@oxc-transform/binding-android-arm64': 0.110.0
- '@oxc-transform/binding-darwin-arm64': 0.110.0
- '@oxc-transform/binding-darwin-x64': 0.110.0
- '@oxc-transform/binding-freebsd-x64': 0.110.0
- '@oxc-transform/binding-linux-arm-gnueabihf': 0.110.0
- '@oxc-transform/binding-linux-arm-musleabihf': 0.110.0
- '@oxc-transform/binding-linux-arm64-gnu': 0.110.0
- '@oxc-transform/binding-linux-arm64-musl': 0.110.0
- '@oxc-transform/binding-linux-ppc64-gnu': 0.110.0
- '@oxc-transform/binding-linux-riscv64-gnu': 0.110.0
- '@oxc-transform/binding-linux-riscv64-musl': 0.110.0
- '@oxc-transform/binding-linux-s390x-gnu': 0.110.0
- '@oxc-transform/binding-linux-x64-gnu': 0.110.0
- '@oxc-transform/binding-linux-x64-musl': 0.110.0
- '@oxc-transform/binding-openharmony-arm64': 0.110.0
- '@oxc-transform/binding-wasm32-wasi': 0.110.0
- '@oxc-transform/binding-win32-arm64-msvc': 0.110.0
- '@oxc-transform/binding-win32-ia32-msvc': 0.110.0
- '@oxc-transform/binding-win32-x64-msvc': 0.110.0
+ '@oxc-transform/binding-android-arm-eabi': 0.112.0
+ '@oxc-transform/binding-android-arm64': 0.112.0
+ '@oxc-transform/binding-darwin-arm64': 0.112.0
+ '@oxc-transform/binding-darwin-x64': 0.112.0
+ '@oxc-transform/binding-freebsd-x64': 0.112.0
+ '@oxc-transform/binding-linux-arm-gnueabihf': 0.112.0
+ '@oxc-transform/binding-linux-arm-musleabihf': 0.112.0
+ '@oxc-transform/binding-linux-arm64-gnu': 0.112.0
+ '@oxc-transform/binding-linux-arm64-musl': 0.112.0
+ '@oxc-transform/binding-linux-ppc64-gnu': 0.112.0
+ '@oxc-transform/binding-linux-riscv64-gnu': 0.112.0
+ '@oxc-transform/binding-linux-riscv64-musl': 0.112.0
+ '@oxc-transform/binding-linux-s390x-gnu': 0.112.0
+ '@oxc-transform/binding-linux-x64-gnu': 0.112.0
+ '@oxc-transform/binding-linux-x64-musl': 0.112.0
+ '@oxc-transform/binding-openharmony-arm64': 0.112.0
+ '@oxc-transform/binding-wasm32-wasi': 0.112.0
+ '@oxc-transform/binding-win32-arm64-msvc': 0.112.0
+ '@oxc-transform/binding-win32-ia32-msvc': 0.112.0
+ '@oxc-transform/binding-win32-x64-msvc': 0.112.0
+
+ oxc-transform@0.117.0:
+ optionalDependencies:
+ '@oxc-transform/binding-android-arm-eabi': 0.117.0
+ '@oxc-transform/binding-android-arm64': 0.117.0
+ '@oxc-transform/binding-darwin-arm64': 0.117.0
+ '@oxc-transform/binding-darwin-x64': 0.117.0
+ '@oxc-transform/binding-freebsd-x64': 0.117.0
+ '@oxc-transform/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-transform/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-transform/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-arm64-musl': 0.117.0
+ '@oxc-transform/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-transform/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-transform/binding-linux-x64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-x64-musl': 0.117.0
+ '@oxc-transform/binding-openharmony-arm64': 0.117.0
+ '@oxc-transform/binding-wasm32-wasi': 0.117.0
+ '@oxc-transform/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-transform/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-transform/binding-win32-x64-msvc': 0.117.0
oxc-transform@0.95.0:
optionalDependencies:
@@ -12441,10 +14384,15 @@ snapshots:
magic-regexp: 0.10.0
oxc-parser: 0.95.0
- oxc-walker@0.7.0(oxc-parser@0.110.0):
+ oxc-walker@0.7.0(oxc-parser@0.112.0):
+ dependencies:
+ magic-regexp: 0.10.0
+ oxc-parser: 0.112.0
+
+ oxc-walker@0.7.0(oxc-parser@0.117.0):
dependencies:
magic-regexp: 0.10.0
- oxc-parser: 0.110.0
+ oxc-parser: 0.117.0
p-limit@3.1.0:
dependencies:
@@ -12466,8 +14414,6 @@ snapshots:
package-manager-detector@1.6.0: {}
- pako@0.2.9: {}
-
pako@1.0.11: {}
parent-module@1.0.1:
@@ -12529,12 +14475,12 @@ snapshots:
path-scurry@1.11.1:
dependencies:
lru-cache: 10.4.3
- minipass: 7.1.2
+ minipass: 7.1.3
- path-scurry@2.0.1:
+ path-scurry@2.0.2:
dependencies:
- lru-cache: 11.2.5
- minipass: 7.1.2
+ lru-cache: 11.2.6
+ minipass: 7.1.3
pathe@1.1.2: {}
@@ -12552,22 +14498,22 @@ snapshots:
pify@4.0.1: {}
- pinia@3.0.4(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)):
+ pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)):
dependencies:
'@vue/devtools-api': 7.7.9
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
optionalDependencies:
typescript: 5.9.3
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
- mlly: 1.8.0
+ mlly: 1.8.1
pathe: 2.0.3
pkg-types@2.3.0:
dependencies:
- confbox: 0.2.2
+ confbox: 0.2.4
exsolve: 1.0.8
pathe: 2.0.3
@@ -12575,142 +14521,142 @@ snapshots:
possible-typed-array-names@1.1.0: {}
- postcss-calc@10.1.1(postcss@8.5.6):
+ postcss-calc@10.1.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
- postcss-colormin@7.0.5(postcss@8.5.6):
+ postcss-colormin@7.0.6(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
caniuse-api: 3.0.0
colord: 2.9.3
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-convert-values@7.0.8(postcss@8.5.6):
+ postcss-convert-values@7.0.9(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-discard-comments@7.0.5(postcss@8.5.6):
+ postcss-discard-comments@7.0.6(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-selector-parser: 7.1.1
- postcss-discard-duplicates@7.0.2(postcss@8.5.6):
+ postcss-discard-duplicates@7.0.2(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
- postcss-discard-empty@7.0.1(postcss@8.5.6):
+ postcss-discard-empty@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
- postcss-discard-overridden@7.0.1(postcss@8.5.6):
+ postcss-discard-overridden@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
- postcss-merge-longhand@7.0.5(postcss@8.5.6):
+ postcss-merge-longhand@7.0.5(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- stylehacks: 7.0.7(postcss@8.5.6)
+ stylehacks: 7.0.8(postcss@8.5.8)
- postcss-merge-rules@7.0.7(postcss@8.5.6):
+ postcss-merge-rules@7.0.8(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
caniuse-api: 3.0.0
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ cssnano-utils: 5.0.1(postcss@8.5.8)
+ postcss: 8.5.8
postcss-selector-parser: 7.1.1
- postcss-minify-font-values@7.0.1(postcss@8.5.6):
+ postcss-minify-font-values@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-minify-gradients@7.0.1(postcss@8.5.6):
+ postcss-minify-gradients@7.0.1(postcss@8.5.8):
dependencies:
colord: 2.9.3
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ cssnano-utils: 5.0.1(postcss@8.5.8)
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-minify-params@7.0.5(postcss@8.5.6):
+ postcss-minify-params@7.0.6(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ cssnano-utils: 5.0.1(postcss@8.5.8)
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-minify-selectors@7.0.5(postcss@8.5.6):
+ postcss-minify-selectors@7.0.6(postcss@8.5.8):
dependencies:
cssesc: 3.0.0
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-selector-parser: 7.1.1
- postcss-normalize-charset@7.0.1(postcss@8.5.6):
+ postcss-normalize-charset@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
- postcss-normalize-display-values@7.0.1(postcss@8.5.6):
+ postcss-normalize-display-values@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-normalize-positions@7.0.1(postcss@8.5.6):
+ postcss-normalize-positions@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-normalize-repeat-style@7.0.1(postcss@8.5.6):
+ postcss-normalize-repeat-style@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-normalize-string@7.0.1(postcss@8.5.6):
+ postcss-normalize-string@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-normalize-timing-functions@7.0.1(postcss@8.5.6):
+ postcss-normalize-timing-functions@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-normalize-unicode@7.0.5(postcss@8.5.6):
+ postcss-normalize-unicode@7.0.6(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-normalize-url@7.0.1(postcss@8.5.6):
+ postcss-normalize-url@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-normalize-whitespace@7.0.1(postcss@8.5.6):
+ postcss-normalize-whitespace@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-ordered-values@7.0.2(postcss@8.5.6):
+ postcss-ordered-values@7.0.2(postcss@8.5.8):
dependencies:
- cssnano-utils: 5.0.1(postcss@8.5.6)
- postcss: 8.5.6
+ cssnano-utils: 5.0.1(postcss@8.5.8)
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- postcss-reduce-initial@7.0.5(postcss@8.5.6):
+ postcss-reduce-initial@7.0.6(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
caniuse-api: 3.0.0
- postcss: 8.5.6
+ postcss: 8.5.8
- postcss-reduce-transforms@7.0.1(postcss@8.5.6):
+ postcss-reduce-transforms@7.0.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
postcss-selector-parser@7.1.1:
@@ -12718,20 +14664,20 @@ snapshots:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss-svgo@7.1.0(postcss@8.5.6):
+ postcss-svgo@7.1.1(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-value-parser: 4.2.0
- svgo: 4.0.0
+ svgo: 4.0.1
- postcss-unique-selectors@7.0.4(postcss@8.5.6):
+ postcss-unique-selectors@7.0.5(postcss@8.5.8):
dependencies:
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-selector-parser: 7.1.1
postcss-value-parser@4.2.0: {}
- postcss@8.5.6:
+ postcss@8.5.8:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
@@ -12745,8 +14691,8 @@ snapshots:
minimist: 1.2.8
mkdirp-classic: 0.5.3
napi-build-utils: 2.0.0
- node-abi: 3.87.0
- pump: 3.0.3
+ node-abi: 3.88.0
+ pump: 3.0.4
rc: 1.2.8
simple-get: 4.0.1
tar-fs: 2.1.4
@@ -12762,14 +14708,9 @@ snapshots:
process@0.11.10: {}
- prompts@2.4.2:
- dependencies:
- kleur: 3.0.3
- sisteransi: 1.0.5
-
property-information@7.1.0: {}
- prosemirror-changeset@2.3.1:
+ prosemirror-changeset@2.4.0:
dependencies:
prosemirror-transform: 1.11.0
@@ -12787,20 +14728,20 @@ snapshots:
dependencies:
prosemirror-state: 1.4.4
prosemirror-transform: 1.11.0
- prosemirror-view: 1.41.5
+ prosemirror-view: 1.41.6
- prosemirror-gapcursor@1.4.0:
+ prosemirror-gapcursor@1.4.1:
dependencies:
prosemirror-keymap: 1.2.3
prosemirror-model: 1.25.4
prosemirror-state: 1.4.4
- prosemirror-view: 1.41.5
+ prosemirror-view: 1.41.6
prosemirror-history@1.5.0:
dependencies:
prosemirror-state: 1.4.4
prosemirror-transform: 1.11.0
- prosemirror-view: 1.41.5
+ prosemirror-view: 1.41.6
rope-sequence: 1.3.4
prosemirror-inputrules@1.5.1:
@@ -12813,13 +14754,13 @@ snapshots:
prosemirror-state: 1.4.4
w3c-keyname: 2.2.8
- prosemirror-markdown@1.13.3:
+ prosemirror-markdown@1.13.4:
dependencies:
'@types/markdown-it': 14.1.2
- markdown-it: 14.1.0
+ markdown-it: 14.1.1
prosemirror-model: 1.25.4
- prosemirror-menu@1.2.5:
+ prosemirror-menu@1.3.0:
dependencies:
crelt: 1.0.6
prosemirror-commands: 1.7.1
@@ -12844,7 +14785,7 @@ snapshots:
dependencies:
prosemirror-model: 1.25.4
prosemirror-transform: 1.11.0
- prosemirror-view: 1.41.5
+ prosemirror-view: 1.41.6
prosemirror-tables@1.8.5:
dependencies:
@@ -12852,21 +14793,21 @@ snapshots:
prosemirror-model: 1.25.4
prosemirror-state: 1.4.4
prosemirror-transform: 1.11.0
- prosemirror-view: 1.41.5
+ prosemirror-view: 1.41.6
- prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.5):
+ prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.6):
dependencies:
'@remirror/core-constants': 3.0.0
escape-string-regexp: 4.0.0
prosemirror-model: 1.25.4
prosemirror-state: 1.4.4
- prosemirror-view: 1.41.5
+ prosemirror-view: 1.41.6
prosemirror-transform@1.11.0:
dependencies:
prosemirror-model: 1.25.4
- prosemirror-view@1.41.5:
+ prosemirror-view@1.41.6:
dependencies:
prosemirror-model: 1.25.4
prosemirror-state: 1.4.4
@@ -12874,7 +14815,7 @@ snapshots:
protocols@2.0.2: {}
- pump@3.0.3:
+ pump@3.0.4:
dependencies:
end-of-stream: 1.4.5
once: 1.4.0
@@ -12900,6 +14841,11 @@ snapshots:
defu: 6.1.4
destr: 2.0.5
+ rc9@3.0.0:
+ dependencies:
+ defu: 6.1.4
+ destr: 2.0.5
+
rc@1.2.8:
dependencies:
deep-extend: 0.6.0
@@ -12933,7 +14879,7 @@ snapshots:
readdir-glob@1.1.3:
dependencies:
- minimatch: 5.1.6
+ minimatch: 5.1.9
readdirp@4.1.2: {}
@@ -13017,22 +14963,21 @@ snapshots:
'@types/hast': 3.0.4
unist-util-visit: 5.1.0
- reka-ui@2.7.0(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)):
+ reka-ui@2.8.2(vue@3.5.30(typescript@5.9.3)):
dependencies:
- '@floating-ui/dom': 1.7.5
- '@floating-ui/vue': 1.1.10(vue@3.5.27(typescript@5.9.3))
- '@internationalized/date': 3.10.1
+ '@floating-ui/dom': 1.7.6
+ '@floating-ui/vue': 1.1.11(vue@3.5.30(typescript@5.9.3))
+ '@internationalized/date': 3.12.0
'@internationalized/number': 3.6.5
- '@tanstack/vue-virtual': 3.13.18(vue@3.5.27(typescript@5.9.3))
- '@vueuse/core': 12.8.2(typescript@5.9.3)
- '@vueuse/shared': 12.8.2(typescript@5.9.3)
+ '@tanstack/vue-virtual': 3.13.21(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
+ '@vueuse/shared': 14.2.1(vue@3.5.30(typescript@5.9.3))
aria-hidden: 1.2.6
defu: 6.1.4
ohash: 2.0.11
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
transitivePeerDependencies:
- '@vue/composition-api'
- - typescript
remark-emoji@5.0.2:
dependencies:
@@ -13058,7 +15003,7 @@ snapshots:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
flat: 6.0.1
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
micromark: 4.0.2
micromark-core-commonmark: 2.0.3
@@ -13079,7 +15024,7 @@ snapshots:
remark-parse@11.0.0:
dependencies:
'@types/mdast': 4.0.4
- mdast-util-from-markdown: 2.0.2
+ mdast-util-from-markdown: 2.0.3
micromark-util-types: 2.0.2
unified: 11.0.5
transitivePeerDependencies:
@@ -13117,56 +15062,56 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- restructure@3.0.2: {}
-
reusify@1.1.0: {}
rfdc@1.4.1: {}
- rollup-plugin-visualizer@6.0.5(rollup@4.57.1):
+ rollup-plugin-visualizer@6.0.11(rollup@4.59.0):
dependencies:
open: 8.4.2
picomatch: 4.0.3
source-map: 0.7.6
yargs: 17.7.2
optionalDependencies:
- rollup: 4.57.1
+ rollup: 4.59.0
- rollup@4.57.1:
+ rollup@4.59.0:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.57.1
- '@rollup/rollup-android-arm64': 4.57.1
- '@rollup/rollup-darwin-arm64': 4.57.1
- '@rollup/rollup-darwin-x64': 4.57.1
- '@rollup/rollup-freebsd-arm64': 4.57.1
- '@rollup/rollup-freebsd-x64': 4.57.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.57.1
- '@rollup/rollup-linux-arm-musleabihf': 4.57.1
- '@rollup/rollup-linux-arm64-gnu': 4.57.1
- '@rollup/rollup-linux-arm64-musl': 4.57.1
- '@rollup/rollup-linux-loong64-gnu': 4.57.1
- '@rollup/rollup-linux-loong64-musl': 4.57.1
- '@rollup/rollup-linux-ppc64-gnu': 4.57.1
- '@rollup/rollup-linux-ppc64-musl': 4.57.1
- '@rollup/rollup-linux-riscv64-gnu': 4.57.1
- '@rollup/rollup-linux-riscv64-musl': 4.57.1
- '@rollup/rollup-linux-s390x-gnu': 4.57.1
- '@rollup/rollup-linux-x64-gnu': 4.57.1
- '@rollup/rollup-linux-x64-musl': 4.57.1
- '@rollup/rollup-openbsd-x64': 4.57.1
- '@rollup/rollup-openharmony-arm64': 4.57.1
- '@rollup/rollup-win32-arm64-msvc': 4.57.1
- '@rollup/rollup-win32-ia32-msvc': 4.57.1
- '@rollup/rollup-win32-x64-gnu': 4.57.1
- '@rollup/rollup-win32-x64-msvc': 4.57.1
+ '@rollup/rollup-android-arm-eabi': 4.59.0
+ '@rollup/rollup-android-arm64': 4.59.0
+ '@rollup/rollup-darwin-arm64': 4.59.0
+ '@rollup/rollup-darwin-x64': 4.59.0
+ '@rollup/rollup-freebsd-arm64': 4.59.0
+ '@rollup/rollup-freebsd-x64': 4.59.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.59.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.59.0
+ '@rollup/rollup-linux-arm64-gnu': 4.59.0
+ '@rollup/rollup-linux-arm64-musl': 4.59.0
+ '@rollup/rollup-linux-loong64-gnu': 4.59.0
+ '@rollup/rollup-linux-loong64-musl': 4.59.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.59.0
+ '@rollup/rollup-linux-ppc64-musl': 4.59.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.59.0
+ '@rollup/rollup-linux-riscv64-musl': 4.59.0
+ '@rollup/rollup-linux-s390x-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-musl': 4.59.0
+ '@rollup/rollup-openbsd-x64': 4.59.0
+ '@rollup/rollup-openharmony-arm64': 4.59.0
+ '@rollup/rollup-win32-arm64-msvc': 4.59.0
+ '@rollup/rollup-win32-ia32-msvc': 4.59.0
+ '@rollup/rollup-win32-x64-gnu': 4.59.0
+ '@rollup/rollup-win32-x64-msvc': 4.59.0
fsevents: 2.3.3
rope-sequence@1.3.4: {}
rou3@0.7.12: {}
+ rou3@0.8.1: {}
+
run-applescript@7.1.0: {}
run-parallel@1.2.0:
@@ -13177,9 +15122,7 @@ snapshots:
safe-buffer@5.2.1: {}
- safer-buffer@2.1.2: {}
-
- sax@1.4.4: {}
+ sax@1.5.0: {}
scslre@0.3.0:
dependencies:
@@ -13191,7 +15134,7 @@ snapshots:
semver@6.3.1: {}
- semver@7.7.3: {}
+ semver@7.7.4: {}
send@1.2.1:
dependencies:
@@ -13213,7 +15156,7 @@ snapshots:
dependencies:
randombytes: 2.1.0
- seroval@1.5.0: {}
+ seroval@1.5.1: {}
serve-placeholder@2.0.2:
dependencies:
@@ -13253,14 +15196,25 @@ snapshots:
shell-quote@1.8.3: {}
- shiki@3.22.0:
+ shiki@3.23.0:
+ dependencies:
+ '@shikijs/core': 3.23.0
+ '@shikijs/engine-javascript': 3.23.0
+ '@shikijs/engine-oniguruma': 3.23.0
+ '@shikijs/langs': 3.23.0
+ '@shikijs/themes': 3.23.0
+ '@shikijs/types': 3.23.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ shiki@4.0.2:
dependencies:
- '@shikijs/core': 3.22.0
- '@shikijs/engine-javascript': 3.22.0
- '@shikijs/engine-oniguruma': 3.22.0
- '@shikijs/langs': 3.22.0
- '@shikijs/themes': 3.22.0
- '@shikijs/types': 3.22.0
+ '@shikijs/core': 4.0.2
+ '@shikijs/engine-javascript': 4.0.2
+ '@shikijs/engine-oniguruma': 4.0.2
+ '@shikijs/langs': 4.0.2
+ '@shikijs/themes': 4.0.2
+ '@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -13274,7 +15228,7 @@ snapshots:
once: 1.4.0
simple-concat: 1.0.1
- simple-git@3.30.0:
+ simple-git@3.33.0:
dependencies:
'@kwsites/file-exists': 1.1.1
'@kwsites/promise-deferred': 1.1.1
@@ -13298,7 +15252,7 @@ snapshots:
slugify@1.6.6: {}
- smob@1.5.0: {}
+ smob@1.6.1: {}
socket.io-client@4.8.3:
dependencies:
@@ -13336,16 +15290,16 @@ snapshots:
spdx-expression-parse@4.0.0:
dependencies:
spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.22
+ spdx-license-ids: 3.0.23
- spdx-license-ids@3.0.22: {}
+ spdx-license-ids@3.0.23: {}
speakingurl@14.0.1: {}
- split2@4.2.0: {}
-
srvx@0.10.1: {}
+ srvx@0.11.9: {}
+
stable-hash-x@0.2.0: {}
standard-as-callback@2.1.0: {}
@@ -13354,11 +15308,13 @@ snapshots:
std-env@3.10.0: {}
+ std-env@4.0.0: {}
+
streamx@2.23.0:
dependencies:
events-universal: 1.0.1
fast-fifo: 1.3.2
- text-decoder: 1.2.3
+ text-decoder: 1.2.7
transitivePeerDependencies:
- bare-abort-controller
- react-native-b4a
@@ -13373,7 +15329,7 @@ snapshots:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
string_decoder@1.1.1:
dependencies:
@@ -13392,7 +15348,7 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.2:
+ strip-ansi@7.2.0:
dependencies:
ansi-regex: 6.2.2
@@ -13402,18 +15358,16 @@ snapshots:
strip-json-comments@2.0.1: {}
- strip-json-comments@3.1.1: {}
-
strip-literal@3.1.0:
dependencies:
js-tokens: 9.0.1
structured-clone-es@1.0.0: {}
- stylehacks@7.0.7(postcss@8.5.6):
+ stylehacks@7.0.8(postcss@8.5.8):
dependencies:
browserslist: 4.28.1
- postcss: 8.5.6
+ postcss: 8.5.8
postcss-selector-parser: 7.1.1
superjson@2.2.6:
@@ -13422,35 +15376,31 @@ snapshots:
supports-color@10.2.2: {}
- supports-color@7.2.0:
- dependencies:
- has-flag: 4.0.0
-
supports-preserve-symlinks-flag@1.0.0: {}
- svgo@4.0.0:
+ svgo@4.0.1:
dependencies:
commander: 11.1.0
css-select: 5.2.2
- css-tree: 3.1.0
+ css-tree: 3.2.1
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
- sax: 1.4.4
+ sax: 1.5.0
system-architecture@0.1.0: {}
tagged-tag@1.0.0: {}
- tailwind-merge@3.4.0: {}
+ tailwind-merge@3.5.0: {}
- tailwind-variants@3.2.2(tailwind-merge@3.4.0)(tailwindcss@4.1.18):
+ tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.1):
dependencies:
- tailwindcss: 4.1.18
+ tailwindcss: 4.2.1
optionalDependencies:
- tailwind-merge: 3.4.0
+ tailwind-merge: 3.5.0
- tailwindcss@4.1.18: {}
+ tailwindcss@4.2.1: {}
tapable@2.3.0: {}
@@ -13458,7 +15408,7 @@ snapshots:
dependencies:
chownr: 1.1.4
mkdirp-classic: 0.5.3
- pump: 3.0.3
+ pump: 3.0.4
tar-stream: 2.2.0
tar-stream@2.2.0:
@@ -13469,33 +15419,42 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
- tar-stream@3.1.7:
+ tar-stream@3.1.8:
dependencies:
- b4a: 1.7.3
+ b4a: 1.8.0
+ bare-fs: 4.5.5
fast-fifo: 1.3.2
streamx: 2.23.0
transitivePeerDependencies:
- bare-abort-controller
+ - bare-buffer
- react-native-b4a
- tar@7.5.7:
+ tar@7.5.11:
dependencies:
'@isaacs/fs-minipass': 4.0.1
chownr: 3.0.0
- minipass: 7.1.2
+ minipass: 7.1.3
minizlib: 3.1.0
yallist: 5.0.0
+ teex@1.0.1:
+ dependencies:
+ streamx: 2.23.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
terser@5.46.0:
dependencies:
'@jridgewell/source-map': 0.3.11
- acorn: 8.15.0
+ acorn: 8.16.0
commander: 2.20.3
source-map-support: 0.5.21
- text-decoder@1.2.3:
+ text-decoder@1.2.7:
dependencies:
- b4a: 1.7.3
+ b4a: 1.8.0
transitivePeerDependencies:
- react-native-b4a
@@ -13503,8 +15462,12 @@ snapshots:
tiny-invariant@1.3.3: {}
+ tinyclip@0.1.12: {}
+
tinyexec@1.0.2: {}
+ tinyexec@1.0.4: {}
+
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
@@ -13553,7 +15516,7 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- type-fest@5.4.3:
+ type-fest@5.4.4:
dependencies:
tagged-tag: 1.0.0
@@ -13577,7 +15540,7 @@ snapshots:
unctx@2.5.0:
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
estree-walker: 3.0.3
magic-string: 0.30.21
unplugin: 2.3.11
@@ -13588,22 +15551,12 @@ snapshots:
dependencies:
pathe: 2.0.3
- unhead@2.1.2:
+ unhead@2.1.12:
dependencies:
hookable: 6.0.1
unicode-emoji-modifier-base@1.0.0: {}
- unicode-properties@1.4.1:
- dependencies:
- base64-js: 1.5.1
- unicode-trie: 2.0.0
-
- unicode-trie@2.0.0:
- dependencies:
- pako: 0.2.9
- tiny-inflate: 1.0.3
-
unicorn-magic@0.3.0: {}
unicorn-magic@0.4.0: {}
@@ -13618,20 +15571,20 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
- unifont@0.6.0:
+ unifont@0.7.4:
dependencies:
- css-tree: 3.1.0
+ css-tree: 3.2.1
ofetch: 1.5.1
ohash: 2.0.11
- unimport@5.6.0:
+ unimport@5.7.0:
dependencies:
- acorn: 8.15.0
+ acorn: 8.16.0
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
local-pkg: 1.1.2
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
pathe: 2.0.3
picomatch: 4.0.3
pkg-types: 2.3.0
@@ -13641,6 +15594,23 @@ snapshots:
unplugin: 2.3.11
unplugin-utils: 0.3.1
+ unimport@6.0.1:
+ dependencies:
+ acorn: 8.16.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.1
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ pkg-types: 2.3.0
+ scule: 1.3.0
+ strip-literal: 3.1.0
+ tinyglobby: 0.2.15
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+
unist-builder@4.0.0:
dependencies:
'@types/unist': 3.0.3
@@ -13673,55 +15643,50 @@ snapshots:
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
- unplugin-auto-import@21.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3))):
+ unplugin-auto-import@21.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(@vueuse/core@14.2.1(vue@3.5.30(typescript@5.9.3))):
dependencies:
local-pkg: 1.1.2
magic-string: 0.30.21
picomatch: 4.0.3
- unimport: 5.6.0
+ unimport: 5.7.0
unplugin: 2.3.11
unplugin-utils: 0.3.1
optionalDependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
- '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3))
-
- unplugin-utils@0.2.5:
- dependencies:
- pathe: 2.0.3
- picomatch: 4.0.3
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
+ '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3))
unplugin-utils@0.3.1:
dependencies:
pathe: 2.0.3
picomatch: 4.0.3
- unplugin-vue-components@31.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(vue@3.5.27(typescript@5.9.3)):
+ unplugin-vue-components@31.0.0(@nuxt/kit@4.3.1(magicast@0.5.2))(vue@3.5.30(typescript@5.9.3)):
dependencies:
chokidar: 5.0.0
local-pkg: 1.1.2
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
obug: 2.1.1
picomatch: 4.0.3
tinyglobby: 0.2.15
unplugin: 2.3.11
unplugin-utils: 0.3.1
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
optionalDependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@nuxt/kit': 4.3.1(magicast@0.5.2)
- unplugin-vue-router@0.16.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)):
+ unplugin-vue-router@0.16.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
dependencies:
- '@babel/generator': 7.29.0
- '@vue-macros/common': 3.1.2(vue@3.5.27(typescript@5.9.3))
- '@vue/compiler-sfc': 3.5.27
- '@vue/language-core': 3.2.4
+ '@babel/generator': 7.29.1
+ '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@5.9.3))
+ '@vue/compiler-sfc': 3.5.30
+ '@vue/language-core': 3.2.5
ast-walker-scope: 0.8.3
chokidar: 4.0.3
json5: 2.2.3
local-pkg: 1.1.2
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
muggle-string: 0.4.1
pathe: 2.0.3
picomatch: 4.0.3
@@ -13731,22 +15696,22 @@ snapshots:
unplugin-utils: 0.3.1
yaml: 2.8.2
optionalDependencies:
- vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3))
+ vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- vue
- unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)):
+ unplugin-vue-router@0.19.2(@vue/compiler-sfc@3.5.30)(vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
dependencies:
- '@babel/generator': 7.29.0
- '@vue-macros/common': 3.1.2(vue@3.5.27(typescript@5.9.3))
- '@vue/compiler-sfc': 3.5.27
- '@vue/language-core': 3.2.4
+ '@babel/generator': 7.29.1
+ '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@5.9.3))
+ '@vue/compiler-sfc': 3.5.30
+ '@vue/language-core': 3.2.5
ast-walker-scope: 0.8.3
chokidar: 5.0.0
json5: 2.2.3
local-pkg: 1.1.2
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
muggle-string: 0.4.1
pathe: 2.0.3
picomatch: 4.0.3
@@ -13756,17 +15721,28 @@ snapshots:
unplugin-utils: 0.3.1
yaml: 2.8.2
optionalDependencies:
- vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3))
+ vue-router: 4.6.4(vue@3.5.30(typescript@5.9.3))
transitivePeerDependencies:
- vue
unplugin@2.3.11:
dependencies:
'@jridgewell/remapping': 2.3.5
- acorn: 8.15.0
+ acorn: 8.16.0
+ picomatch: 4.0.3
+ webpack-virtual-modules: 0.6.2
+
+ unplugin@3.0.0:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
picomatch: 4.0.3
webpack-virtual-modules: 0.6.2
+ unrouting@0.1.7:
+ dependencies:
+ escape-string-regexp: 5.0.0
+ ufo: 1.6.3
+
unrs-resolver@1.11.1:
dependencies:
napi-postinstall: 0.3.4
@@ -13791,19 +15767,33 @@ snapshots:
'@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
'@unrs/resolver-binding-win32-x64-msvc': 1.11.1
- unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.2):
+ unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.10.0):
dependencies:
anymatch: 3.1.3
chokidar: 5.0.0
destr: 2.0.5
- h3: 1.15.5
- lru-cache: 11.2.5
+ h3: 1.15.6
+ lru-cache: 11.2.6
node-fetch-native: 1.6.7
ofetch: 1.5.1
ufo: 1.6.3
optionalDependencies:
db0: 0.3.4(better-sqlite3@12.6.2)
- ioredis: 5.9.2
+ ioredis: 5.10.0
+
+ unstorage@1.17.4(db0@0.3.4(better-sqlite3@12.8.0))(ioredis@5.10.0):
+ dependencies:
+ anymatch: 3.1.3
+ chokidar: 5.0.0
+ destr: 2.0.5
+ h3: 1.15.6
+ lru-cache: 11.2.6
+ node-fetch-native: 1.6.7
+ ofetch: 1.5.1
+ ufo: 1.6.3
+ optionalDependencies:
+ db0: 0.3.4(better-sqlite3@12.8.0)
+ ioredis: 5.10.0
untun@0.1.3:
dependencies:
@@ -13824,7 +15814,7 @@ snapshots:
exsolve: 1.0.8
knitwork: 1.3.0
magic-string: 0.30.21
- mlly: 1.8.0
+ mlly: 1.8.1
pathe: 2.0.3
pkg-types: 2.3.0
@@ -13842,11 +15832,11 @@ snapshots:
util-deprecate@1.0.2: {}
- vaul-vue@0.4.1(reka-ui@2.7.0(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)):
+ vaul-vue@0.4.1(reka-ui@2.8.2(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
dependencies:
- '@vueuse/core': 10.11.1(vue@3.5.27(typescript@5.9.3))
- reka-ui: 2.7.0(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3))
- vue: 3.5.27(typescript@5.9.3)
+ '@vueuse/core': 10.11.1(vue@3.5.30(typescript@5.9.3))
+ reka-ui: 2.8.2(vue@3.5.30(typescript@5.9.3))
+ vue: 3.5.30(typescript@5.9.3)
transitivePeerDependencies:
- '@vue/composition-api'
@@ -13865,23 +15855,23 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)):
+ vite-dev-rpc@1.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)):
dependencies:
birpc: 2.9.0
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vite-hot-client: 2.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
- vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)):
+ vite-hot-client@2.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)):
dependencies:
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
- vite-node@5.3.0(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2):
+ vite-node@5.3.0(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2):
dependencies:
cac: 6.7.14
es-module-lexer: 2.0.0
obug: 2.1.1
pathe: 2.0.3
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -13895,7 +15885,7 @@ snapshots:
- tsx
- yaml
- vite-plugin-checker@0.12.0(eslint@9.39.2(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3)):
+ vite-plugin-checker@0.12.0(eslint@10.1.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.6(typescript@5.9.3)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -13904,16 +15894,16 @@ snapshots:
picomatch: 4.0.3
tiny-invariant: 1.3.3
tinyglobby: 0.2.15
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
vscode-uri: 3.1.0
optionalDependencies:
- eslint: 9.39.2(jiti@2.6.1)
+ eslint: 10.1.0(jiti@2.6.1)
meow: 13.2.0
optionator: 0.9.4
typescript: 5.9.3
- vue-tsc: 3.2.4(typescript@5.9.3)
+ vue-tsc: 3.2.6(typescript@5.9.3)
- vite-plugin-inspect@11.3.3(@nuxt/kit@4.3.0(magicast@0.5.1))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)):
+ vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)):
dependencies:
ansis: 4.2.0
debug: 4.4.3
@@ -13923,42 +15913,42 @@ snapshots:
perfect-debounce: 2.1.0
sirv: 3.0.2
unplugin-utils: 0.3.1
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vite-dev-rpc: 1.1.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
optionalDependencies:
- '@nuxt/kit': 4.3.0(magicast@0.5.1)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)):
+ vite-plugin-vue-tracer@1.2.0(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.8
magic-string: 0.30.21
pathe: 2.0.3
source-map-js: 1.2.1
- vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)
- vue: 3.5.27(typescript@5.9.3)
+ vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)
+ vue: 3.5.30(typescript@5.9.3)
- vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2):
+ vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2):
dependencies:
- esbuild: 0.27.2
+ esbuild: 0.27.3
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- postcss: 8.5.6
- rollup: 4.57.1
+ postcss: 8.5.8
+ rollup: 4.59.0
tinyglobby: 0.2.15
optionalDependencies:
'@types/node': 25.2.0
fsevents: 2.3.3
jiti: 2.6.1
- lightningcss: 1.31.1
+ lightningcss: 1.32.0
terser: 5.46.0
yaml: 2.8.2
- vitest-environment-nuxt@1.0.1(magicast@0.5.1)(typescript@5.9.3):
+ vitest-environment-nuxt@1.0.1(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2)):
dependencies:
- '@nuxt/test-utils': 3.23.0(magicast@0.5.1)(typescript@5.9.3)
+ '@nuxt/test-utils': 4.0.0(magicast@0.5.2)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.0)(yaml@2.8.2))
transitivePeerDependencies:
- '@cucumber/cucumber'
- '@jest/globals'
@@ -13972,6 +15962,7 @@ snapshots:
- magicast
- playwright-core
- typescript
+ - vite
- vitest
vscode-uri@3.1.0: {}
@@ -13980,59 +15971,84 @@ snapshots:
dependencies:
ufo: 1.6.3
- vue-component-meta@3.2.4(typescript@5.9.3):
+ vue-component-meta@3.2.5(typescript@5.9.3):
dependencies:
- '@volar/typescript': 2.4.27
- '@vue/language-core': 3.2.4
+ '@volar/typescript': 2.4.28
+ '@vue/language-core': 3.2.5
path-browserify: 1.0.1
optionalDependencies:
typescript: 5.9.3
- vue-component-type-helpers@3.2.4: {}
+ vue-component-type-helpers@3.2.5: {}
- vue-demi@0.14.10(vue@3.5.27(typescript@5.9.3)):
+ vue-demi@0.14.10(vue@3.5.30(typescript@5.9.3)):
dependencies:
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
vue-devtools-stub@0.1.0: {}
- vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1)):
+ vue-eslint-parser@10.4.0(eslint@10.1.0(jiti@2.6.1)):
dependencies:
debug: 4.4.3
- eslint: 9.39.2(jiti@2.6.1)
- eslint-scope: 8.4.0
- eslint-visitor-keys: 4.2.1
- espree: 10.4.0
+ eslint: 10.1.0(jiti@2.6.1)
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
esquery: 1.7.0
- semver: 7.7.3
+ semver: 7.7.4
transitivePeerDependencies:
- supports-color
- vue-i18n@11.2.8(vue@3.5.27(typescript@5.9.3)):
+ vue-i18n@11.3.0(vue@3.5.30(typescript@5.9.3)):
dependencies:
- '@intlify/core-base': 11.2.8
- '@intlify/shared': 11.2.8
+ '@intlify/core-base': 11.3.0
+ '@intlify/devtools-types': 11.3.0
+ '@intlify/shared': 11.3.0
'@vue/devtools-api': 6.6.4
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
- vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)):
+ vue-router@4.6.4(vue@3.5.30(typescript@5.9.3)):
dependencies:
'@vue/devtools-api': 6.6.4
- vue: 3.5.27(typescript@5.9.3)
+ vue: 3.5.30(typescript@5.9.3)
+
+ vue-router@5.0.3(@vue/compiler-sfc@3.5.30)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))(vue@3.5.30(typescript@5.9.3)):
+ dependencies:
+ '@babel/generator': 7.29.1
+ '@vue-macros/common': 3.1.2(vue@3.5.30(typescript@5.9.3))
+ '@vue/devtools-api': 8.1.0
+ ast-walker-scope: 0.8.3
+ chokidar: 5.0.0
+ json5: 2.2.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.1
+ muggle-string: 0.4.1
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ scule: 1.3.0
+ tinyglobby: 0.2.15
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+ vue: 3.5.30(typescript@5.9.3)
+ yaml: 2.8.2
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.30
+ pinia: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3))
- vue-tsc@3.2.4(typescript@5.9.3):
+ vue-tsc@3.2.6(typescript@5.9.3):
dependencies:
- '@volar/typescript': 2.4.27
- '@vue/language-core': 3.2.4
+ '@volar/typescript': 2.4.28
+ '@vue/language-core': 3.2.6
typescript: 5.9.3
- vue@3.5.27(typescript@5.9.3):
+ vue@3.5.30(typescript@5.9.3):
dependencies:
- '@vue/compiler-dom': 3.5.27
- '@vue/compiler-sfc': 3.5.27
- '@vue/runtime-dom': 3.5.27
- '@vue/server-renderer': 3.5.27(vue@3.5.27(typescript@5.9.3))
- '@vue/shared': 3.5.27
+ '@vue/compiler-dom': 3.5.30
+ '@vue/compiler-sfc': 3.5.30
+ '@vue/runtime-dom': 3.5.30
+ '@vue/server-renderer': 3.5.30(vue@3.5.30(typescript@5.9.3))
+ '@vue/shared': 3.5.30
optionalDependencies:
typescript: 5.9.3
@@ -14067,7 +16083,7 @@ snapshots:
which@5.0.0:
dependencies:
- isexe: 3.1.1
+ isexe: 3.1.5
word-wrap@1.2.5: {}
@@ -14081,7 +16097,7 @@ snapshots:
dependencies:
ansi-styles: 6.2.3
string-width: 5.1.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.2.0
wrappy@1.0.2: {}
@@ -14091,7 +16107,7 @@ snapshots:
wsl-utils@0.1.0:
dependencies:
- is-wsl: 3.1.0
+ is-wsl: 3.1.1
xml-name-validator@4.0.0: {}
@@ -14140,10 +16156,10 @@ snapshots:
'@poppinss/exception': 1.2.3
error-stack-parser-es: 1.0.5
- youch@4.1.0-beta.13:
+ youch@4.1.0:
dependencies:
'@poppinss/colors': 4.1.6
- '@poppinss/dumper': 0.6.5
+ '@poppinss/dumper': 0.7.0
'@speed-highlight/core': 1.2.14
cookie-es: 2.0.0
youch-core: 0.3.3
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 04f8bfdc..592dcb3c 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,3 +1,7 @@
+packages:
+ - '.'
+ - 'docs'
+
shamefullyHoist: true
ignoredBuiltDependencies:
diff --git a/public/favicon.ico b/public/favicon.ico
index 18993ad9..0fffb8a1 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/pyproject.toml b/pyproject.toml
index 0534d358..63180025 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "jairocloud-groups-manager"
-version = "0.1.0"
+version = "1.0.0a1"
authors = [
{name = "National Institute of Informatics"}
]
@@ -10,33 +10,42 @@ license = {file = "LICENSE"}
requires-python = ">=3.14"
dependencies = [
"celery[redis]>=5.6.2",
- "flask>=3.1.2",
+ "flask>=3.1.3",
"flask-login>=0.6.3",
"flask-pydantic>=0.14.0",
"flask-sqlalchemy>=3.1.1",
- "psycopg[binary]>=3.3.2",
- "pydantic-settings>=2.12.0",
+ "openpyxl>=3.1.5",
+ "psycopg[binary]>=3.3.3",
+ "pydantic-settings>=2.13.1",
"pydantic[email]>=2.12.5",
"requests>=2.32.5",
"sqlalchemy-utils>=0.42.1",
+ "weko-group-cache-db",
]
[dependency-groups]
dev = [
+ "celery-types>=0.24.0",
+ "pyright>=1.1.408",
"pytest>=9.0.2",
"pytest-cov>=7.0.0",
"pytest-mock>=3.15.1",
"taskipy>=1.14.1",
]
+[project.scripts]
+jairocloud-groups-manager = "server.app:cli"
+
[tool.taskipy.tasks]
# refer to https://github.com/taskipy/taskipy?tab=readme-ov-file#usage
"test" = "pytest"
-"test:cov" = "pytest --cov=server --cov-report=term --cov-report=html"
+"coverage" = "pytest --cov=server --cov-report=term --cov-report=html"
"lint" = "uvx ruff check"
"lint:fix" = "uvx ruff check --fix"
"format" = "uvx ruff format"
+"generate-stubs" = "python src/contrib/messages.py"
+"typecheck" = "task generate-stubs && pyright"
"check-updates" = "uvx --from=pip-check-updates pcu pyproject.toml"
@@ -51,7 +60,7 @@ branch = true
source = ["src/server"]
[tool.coverage.report]
-omit = ["__init__.py", "tests/*"]
+omit = ["__init__.py", "src/contrib/*", "tests/*"]
exclude_also = [
"if t.TYPE_CHECKING:",
]
@@ -73,7 +82,7 @@ select = ["ALL"]
"__init__.py" = ["F401"]
"**/api/**.py" = ["TC001", "TC002", "TC003"]
"**/entities/**.py" = ["TC001", "TC002", "TC003"]
-"*.pyi" = ["CPY001"]
+"*.pyi" = ["CPY001", "E501"]
[tool.ruff.lint.isort]
# refer to https://docs.astral.sh/ruff/settings/#lintisort
@@ -98,5 +107,9 @@ skip-magic-trailing-comma = false
[tool.pyright]
-extraPaths = ["src/server"]
+include = ["src"]
+extraPaths = ["src"]
typeCheckingMode = "standard"
+
+[tool.uv.sources]
+weko-group-cache-db = { git = "https://github.com/ivis-weko3-dev/weko-group-cache-db.git", rev = "develop" }
diff --git a/src/app/app.config.ts b/src/app/app.config.ts
index 5cc21abb..c19031ce 100644
--- a/src/app/app.config.ts
+++ b/src/app/app.config.ts
@@ -1,4 +1,4 @@
-import context from '@@/configs/app.config'
+import context from '../../configs/app.config'
export default defineAppConfig({
...context,
diff --git a/src/app/components/DevLoginForm.vue b/src/app/components/DevLoginForm.vue
new file mode 100644
index 00000000..40168b99
--- /dev/null
+++ b/src/app/components/DevLoginForm.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ {{ $t('login.dev-login-title') }}
+
+
+
+
+
+
+
+ {{ $t('login.dev-login-button') }}
+
+
+
diff --git a/src/app/components/EmbeddedDs.vue b/src/app/components/EmbeddedDs.vue
index cfe60baa..7fed2ea5 100644
--- a/src/app/components/EmbeddedDs.vue
+++ b/src/app/components/EmbeddedDs.vue
@@ -309,10 +309,13 @@ onMounted(() => {
const iframeElement = document.createElement('iframe')
iframeElement.id = 'embedded-wayf-iframe'
iframeElement.srcdoc = embeddedWAYF
- iframeElement.width = '100%'
- iframeElement.style.maxWidth = '800px'
- iframeElement.height = '300px'
+ iframeElement.className
+ = 'w-full max-w-[800px] h-[300px] -mb-[111px] max-[865px]:-mb-[82px]'
+ const parentElement = wayfContainer.parentNode
+ if (parentElement instanceof HTMLElement) {
+ parentElement.className = `${parentElement.className} relative z-50`
+ }
wayfContainer.parentNode.replaceChild(iframeElement, wayfContainer)
}
})
diff --git a/src/app/components/NumberIndicator.vue b/src/app/components/NumberIndicator.vue
index 0a9117ef..61e64f58 100644
--- a/src/app/components/NumberIndicator.vue
+++ b/src/app/components/NumberIndicator.vue
@@ -1,11 +1,52 @@
@@ -13,13 +54,18 @@ defineProps<{
:title="title" :description="String(number)" :to="to"
orientation="horizontal" reverse
:ui="{
- container: 'grid grid-cols-3 lg:grid-cols-3 gap-2',
- wrapper: 'col-span-2',
- description: 'text-2xl font-bold text-highlighted',
+ root: mergedUi.root,
+ container: mergedUi.container,
+ wrapper: mergedUi.wrapper,
+ body: mergedUi.body,
+ title: mergedUi.title,
+ description: mergedUi.description,
}"
>
-
-
+
+
+
+
diff --git a/src/app/components/app/AppFooter.vue b/src/app/components/app/AppFooter.vue
index e537e7de..fa349afc 100644
--- a/src/app/components/app/AppFooter.vue
+++ b/src/app/components/app/AppFooter.vue
@@ -5,6 +5,8 @@
@@ -37,11 +39,17 @@ const { footer: columns } = useMenu()
-
+
{{ $t('footer.privacy-policy') }}
|
-
+
{{ $t('footer.terms-of-use') }}
diff --git a/src/app/components/app/AppHeader.vue b/src/app/components/app/AppHeader.vue
index efbaa9ca..62204646 100644
--- a/src/app/components/app/AppHeader.vue
+++ b/src/app/components/app/AppHeader.vue
@@ -7,24 +7,56 @@ const { setLocale } = useI18n()
const { currentUser, isAuthenticated } = useAuth()
const { currentLocale: locale, locales } = useAvailableLocales()
-const { navigation: items } = useMenu()
+const { navigation: items, submenu } = useMenu()
+
+
+
+
+
+
+
+ {{ currentUser?.userName }}
+
+
+ {{ currentUser?.eppn }}
+
+
+
+
+ { [item.onClick].flat().forEach(fn => fn?.(event)); close(); }"
+ />
+
+
+import type { CommandPaletteGroup } from '@nuxt/ui'
+
+const toast = useToast()
+const { $api } = useNuxtApp()
+const { header: { globalSearch } } = useAppConfig()
+const { searchTerm, previousSearchTerm, makeResultGroups } = useGlobalSearch()
+const { handleFetchError } = useErrorHandling()
+
+const result = ref(undefined)
+const status = ref<'idle' | 'pending' | 'success' | 'error'>('idle')
+
+const groups = computed(() => {
+ if (status.value !== 'success' || !result.value) return []
+
+ return makeResultGroups(result.value)
+})
+
+const isOpen = ref(false)
+defineShortcuts({
+ '/': () => isOpen.value = !isOpen.value,
+})
+const onSelect = () => {
+ isOpen.value = false
+}
+const onClose = () => {
+ searchTerm.value = ''
+ previousSearchTerm.value = ''
+ result.value = undefined
+ status.value = 'idle'
+}
+
+const executeSearch = async () => {
+ if (!searchTerm.value) return
+ previousSearchTerm.value = searchTerm.value
+ status.value = 'pending'
+
+ // Use $fetch instead of useFetch to avoid stale query params when component remounts via v-if.
+ try {
+ result.value = await $api('/api/search', {
+ method: 'GET',
+ query: { q: searchTerm.value, limit: globalSearch.limit },
+ onResponseError({ response }) {
+ switch (response.status) {
+ case 400: {
+ toast.add({
+ title: $t('toast.error.failed-search.title'),
+ description: $t('toast.error.invalid-search-query.description'),
+ color: 'error',
+ })
+ break
+ }
+ default: {
+ handleFetchError({ response })
+ }
+ }
+ },
+ })
+ status.value = 'success'
+ }
+ catch {
+ status.value = 'error'
+ }
+}
+const handleKeydown = async (event: KeyboardEvent) => {
+ if (!isOpen.value) return
+
+ if (event.key === 'Enter' && searchTerm.value !== previousSearchTerm.value) {
+ event.preventDefault()
+ event.stopPropagation()
+ await executeSearch()
+ }
+}
+
+const emptyResultMessage = computed(() => {
+ if (previousSearchTerm.value.length === 0) return $t('header.global-search.search-empty')
+ if (status.value === 'pending') return $t('header.global-search.search-loading')
+ return $t('header.global-search.no-results', { searchTerm: previousSearchTerm.value })
+})
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ emptyResultMessage }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/components/bulk/BulkResultStep.vue b/src/app/components/bulk/BulkResultStep.vue
new file mode 100644
index 00000000..04469b85
--- /dev/null
+++ b/src/app/components/bulk/BulkResultStep.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('bulk.upload-file-info') }}
+
+
+
+
+
+ {{ $t('bulk.upload-file') }}:
+ {{ fileInfo.fileName || '-' }}
+
+
+ {{ $t('bulk.start-at') }}:
+
+ {{ fileInfo.startedAt ? new Date(fileInfo.startedAt).toLocaleString('ja-JP') : '-' }}
+
+
+
+ {{ $t('bulk.operator') }}:
+ {{ fileInfo.executedBy || '-' }}
+
+
+ {{ $t('bulk.completed-at') }}:
+
+ {{ fileInfo.completedAt ? new Date(fileInfo.completedAt).toLocaleString('ja-JP')
+ : '-' }}
+
+
+
+
+
+
+
diff --git a/src/app/components/bulk/BulkUploadStep.vue b/src/app/components/bulk/BulkUploadStep.vue
new file mode 100644
index 00000000..be067468
--- /dev/null
+++ b/src/app/components/bulk/BulkUploadStep.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+ - {{ $t('bulk.about-description') }}
+ - {{ $t('bulk.about-description2') }}
+ - {{ $t('bulk.about-description3') }}
+ - {{ $t('bulk.about-description4') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/components/bulk/BulkUserTable.vue b/src/app/components/bulk/BulkUserTable.vue
new file mode 100644
index 00000000..b82a33a8
--- /dev/null
+++ b/src/app/components/bulk/BulkUserTable.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+ updateQuery(
+ { l: pageSize, p: Math.ceil((offset ?? 1) / pageSize!) },
+ )"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ pageInfo }}
+
+
+
+ updateQuery({ p: value })"
+ />
+
+
+
+
diff --git a/src/app/components/bulk/BulkValidationStep.vue b/src/app/components/bulk/BulkValidationStep.vue
new file mode 100644
index 00000000..47218332
--- /dev/null
+++ b/src/app/components/bulk/BulkValidationStep.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('bulk.missing_user') }} ({{ validationResults?.missingUsers.length ?? 0 }})
+
+
+
+
+
+
+
+
+ {{ $t('bulk.missing-user.select') }}
+
+
+
+
+
+
+
+
+
+ {{ user.name }}
+
+
+ {{ user.eppn }}
+
+
+
+
+ {{ group }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/components/group/GroupForm.vue b/src/app/components/group/GroupForm.vue
index a664eb91..56c9bcb5 100644
--- a/src/app/components/group/GroupForm.vue
+++ b/src/app/components/group/GroupForm.vue
@@ -4,17 +4,20 @@ import type { FormErrorEvent, FormSubmitEvent } from '@nuxt/ui'
interface Properties {
modelValue: GroupCreateForm | GroupUpdateForm
mode: FormMode
+ onSubmit: (event: FormSubmitEvent) => Promise
}
const properties = defineProps()
const emit = defineEmits<{
'update:modelValue': [value: GroupCreateForm | GroupUpdateForm]
- 'submit': [data: GroupCreatePayload | GroupUpdatePayload]
'error': [event: FormErrorEvent]
'cancel': []
}>()
-const { table: { pageSize } } = useAppConfig()
+const {
+ table: { pageSize },
+ features: { repositories: { 'server-search': serverSearch } },
+} = useAppConfig()
const { schema, getMaxIdLength } = useGroupSchema(() => properties.mode)
const { handleFormError } = useFormError()
@@ -30,8 +33,8 @@ const { copy } = useClipboard()
const copyId = (id: string) => {
copy(id)
toast.add({
- title: $t('toast.success-title'),
- description: $t('groups.actions.copy-id-success'),
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-group-id.description'),
color: 'success',
icon: 'i-lucide-circle-check',
})
@@ -47,20 +50,21 @@ const {
} = useSelectMenuInfiniteScroll({
url: '/api/repositories',
limit: pageSize.repositories[0],
- transform: (repository: RepositorySummary) => ({
+ transform: repository => ({
label: repository.serviceName,
value: repository.id,
}),
+ server: serverSearch,
})
setupRepoScroll(repositorySelect)
-const maxIdLength = computed(() => getMaxIdLength(state.value.repository.id),
+const maxIdLength = computed(() =>
+ stateAsCreate.value.repository.value
+ ? getMaxIdLength(state.value.repository.value || '')
+ : 0,
)
const form = useTemplateRef('form')
-const onSubmit = (event: FormSubmitEvent) => {
- emit('submit', event.data)
-}
const onError = (event: FormErrorEvent) => {
handleFormError(event)
emit('error', event)
@@ -74,9 +78,9 @@ const onCancel = () => {
onSubmit(
- event as FormSubmitEvent,
+ event as FormSubmitEvent,
)"
@error="onError"
>
@@ -87,38 +91,43 @@ const onCancel = () => {
+
+
+ {{ state.repository.label || '-' }}
+
+
-
- {{ stateAsEdit.id || '-' }}
- copyId(stateAsEdit.id)"
- />
-
{
{{ stateAsCreate.userDefinedId.length }} / {{ maxIdLength }}
+
+
+
+ {{ stateAsEdit.id || '-' }}
+ copyId(stateAsEdit.id)"
+ />
+
{
v-if="mode !== 'new'"
:label="$t('user.created')" :ui="{ wrapper: 'mb-2' }"
>
-
+
{{ stateAsEdit.created || '-' }}
@@ -175,11 +201,13 @@ const onCancel = () => {
v-if="mode === 'new'"
:label="$t('button.save')"
type="submit" icon="i-lucide-save" color="info" variant="subtle"
+ loading-auto
/>
diff --git a/src/app/components/history/HistoryFilter.vue b/src/app/components/history/HistoryFilter.vue
new file mode 100644
index 00000000..7d595cf4
--- /dev/null
+++ b/src/app/components/history/HistoryFilter.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+ {{ $t('history.filter.title') }}
+
+ {
+ updateQuery({
+ tab: tab,
+ s: undefined,
+ e: undefined,
+ r: undefined,
+ g: undefined,
+ u: undefined,
+ o: undefined,
+ p: 1,
+ })
+ specifiedRepos = []
+ specifiedGroups = []
+ specifiedUsers = []
+ specifiedOperators = []
+ dateRange.start = undefined
+ dateRange.end = undefined
+ }"
+ />
+
+
+
+
+
+
+ updateQuery(
+ { s: dateRange.start?.toString(), e: dateRange.end?.toString(), p: 1 },
+ )"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/components/history/HistoryTable.vue b/src/app/components/history/HistoryTable.vue
new file mode 100644
index 00000000..41b43d40
--- /dev/null
+++ b/src/app/components/history/HistoryTable.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+ {{ $t('history.table-title') }}
+
+
+
+ updateQuery(
+ { l: pageSize, p: Math.ceil(offset / pageSize!) },
+ )"
+ />
+
+
+
+
+
+
+
+
+
+
+ {{ child.timestamp }} ({{ child.operator }})
+
+
+
+
+
+
+
+ {{ pageInfo }}
+
+
+ updateQuery({ p: value })"
+ />
+
+
+
diff --git a/src/app/components/repository/RepositoryForm.vue b/src/app/components/repository/RepositoryForm.vue
index 2f6f689e..e6c7e9cf 100644
--- a/src/app/components/repository/RepositoryForm.vue
+++ b/src/app/components/repository/RepositoryForm.vue
@@ -4,16 +4,17 @@ import type { FormErrorEvent, FormSubmitEvent } from '@nuxt/ui'
interface Properties {
modelValue: RepositoryForm | RepositoryCreateForm
mode: FormMode
+ onSubmit: (event: FormSubmitEvent) => Promise
}
const properties = defineProps()
const emit = defineEmits<{
'update:modelValue': [value: RepositoryForm | RepositoryCreateForm]
- 'submit': [data: RepositoryUpdatePayload | RepositoryCreatePayload]
'error': [event: FormErrorEvent]
'cancel': []
}>()
+const { currentUser } = useAuth()
const { schema, maxUrlLength } = useRepositorySchema(() => properties.mode)
const { handleFormError } = useFormError()
@@ -23,6 +24,27 @@ const state = computed({
})
const stateAsEdit = computed(() => properties.modelValue as RepositoryForm)
+const toast = useToast()
+const { copy } = useClipboard()
+const copyUrl = (url: string) => {
+ copy(url)
+ toast.add({
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-service-url.description'),
+ color: 'success',
+ icon: 'i-lucide-circle-check',
+ })
+}
+const copyEntityId = (id: string) => {
+ copy(id)
+ toast.add({
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-entity-id.description'),
+ color: 'success',
+ icon: 'i-lucide-circle-check',
+ })
+}
+
const addEntityId = () => {
state.value.entityIds.push('')
}
@@ -33,9 +55,6 @@ const removeEntityId = (index: number) => {
}
const form = useTemplateRef('form')
-const onSubmit = (event: FormSubmitEvent) => {
- emit('submit', event.data)
-}
const onError = (event: FormErrorEvent) => {
handleFormError(event)
emit('error', event)
@@ -63,22 +82,31 @@ const onCancel = () => {
:ui="{ wrapper: 'mb-2' }" :required="mode !== 'view'"
>
+
+ {{ state.serviceName || '-' }}
+
https://
@@ -88,6 +116,18 @@ const onCancel = () => {
{{ state.serviceUrl.length }} / {{ maxUrlLength }}
+
+ https://{{ state.serviceUrl || '-' }}
+
+
{
/>
-
-
+
+
+
+
+
+
+
+ {{ entityId }}
-
-
+
+
@@ -136,13 +190,13 @@ const onCancel = () => {
:description="$t('repository.sp-connector-description')"
:ui="{ wrapper: 'mb-2' }"
>
-
+
{{ stateAsEdit.spConnectorId }}
{
v-if="mode !== 'new'"
:label="$t('repository.created')" :ui="{ wrapper: 'mb-2' }"
>
-
+
{{ stateAsEdit.created || '-' }}
@@ -177,11 +231,13 @@ const onCancel = () => {
v-if="mode === 'new'"
:label="$t('button.save')"
type="submit" icon="i-lucide-save" color="info" variant="subtle"
+ loading-auto
/>
diff --git a/src/app/components/user/UserForm.vue b/src/app/components/user/UserForm.vue
index e20705e3..110b99aa 100644
--- a/src/app/components/user/UserForm.vue
+++ b/src/app/components/user/UserForm.vue
@@ -2,19 +2,22 @@
import type { FormErrorEvent, FormSubmitEvent } from '@nuxt/ui'
interface Properties {
- modelValue: UserForm | UserCreateForm
+ modelValue: UserForm | UserCreateForm | UserUpdateForm
mode: FormMode
+ onSubmit: (event: FormSubmitEvent) => Promise
}
const properties = defineProps()
const emit = defineEmits<{
- 'update:modelValue': [value: UserForm | UserCreateForm]
- 'submit': [data: UserCreatePayload]
+ 'update:modelValue': [value: UserForm | UserCreateForm | UserUpdateForm]
'error': [event: FormErrorEvent]
'cancel': []
}>()
-const { table: { pageSize } } = useAppConfig()
+const {
+ table: { pageSize },
+ features: { repositories: { 'server-search': serverSearch } },
+} = useAppConfig()
const { currentUser } = useAuth()
const { schema } = useUserSchema(() => properties.mode)
const { preferredLanguageOptions, userRoleOptions } = useUserFormOptions()
@@ -28,11 +31,11 @@ const stateAsEdit = computed(() => properties.modelValue as UserForm)
const toast = useToast()
const { copy } = useClipboard()
-const copyId = (id: string) => {
- copy(id)
+const copyField = (value: string, key: 'id' | 'username' | 'emails' | 'eppns') => {
+ copy(value)
toast.add({
- title: $t('toast.success-title'),
- description: $t('user.actions.copy-id-success'),
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-field.description', { field: $t(`user.${key}`) }),
color: 'success',
icon: 'i-lucide-circle-check',
})
@@ -48,10 +51,11 @@ const {
} = useSelectMenuInfiniteScroll({
url: '/api/repositories',
limit: pageSize.repositories[0],
- transform: (repository: RepositorySummary) => ({
+ transform: repository => ({
label: repository.serviceName,
value: repository.id,
}),
+ server: serverSearch,
})
setupRepoScroll(repositorySelect)
@@ -65,15 +69,16 @@ const {
} = useSelectMenuInfiniteScroll({
url: '/api/groups',
limit: pageSize.groups[0],
- transform: (group: GroupSummary) => ({
+ transform: group => ({
label: group.displayName,
value: group.id,
}),
})
setupGroupScroll(groupSelect)
-type MultipleField = { [K in keyof T]: T[K] extends string[] ? K : never }[keyof T]
+const form = useTemplateRef('form')
+type MultipleField = { [K in keyof T]: T[K] extends string[] ? K : never }[keyof T]
const addField = (name: MultipleField) => {
state.value[name].push('')
}
@@ -84,27 +89,31 @@ const removeField = (name: MultipleField, index: numb
}
const addRepositoryRole = () => {
- state.value.repositoryRoles.push({ id: '', label: '', userRole: undefined })
+ state.value.repositoryRoles.push({ value: undefined, label: undefined, userRole: undefined })
}
const removeRepositoryRole = (index: number) => {
if (state.value.repositoryRoles.length > 1) {
state.value.repositoryRoles.splice(index, 1)
}
+ else {
+ state.value.repositoryRoles[index] = { value: undefined, label: undefined, userRole: undefined }
+ }
+ form.value?.validate({ silent: false })
}
const addGroup = () => {
- state.value.groups.push({ id: '', label: '' })
+ state.value.groups.push({ value: undefined, label: undefined })
}
const removeGroup = (index: number) => {
if (state.value.groups.length > 1) {
state.value.groups.splice(index, 1)
}
+ else {
+ state.value.groups[index] = { value: undefined, label: undefined }
+ }
+ form.value?.validate({ silent: false })
}
-const form = useTemplateRef('form')
-const onSubmit = (event: FormSubmitEvent) => {
- emit('submit', event.data)
-}
const onError = (event: FormErrorEvent) => {
handleFormError(event)
emit('error', event)
@@ -113,13 +122,18 @@ const onCancel = () => {
form.value?.clear()
emit('cancel')
}
+
+const isSelf = computed(() =>
+ properties.mode === 'new' ? false : currentUser.value?.id === stateAsEdit.value.id,
+)
onSubmit(event as FormSubmitEvent)" @error="onError"
+ @submit="(event) => onSubmit(event as FormSubmitEvent)"
+ @error="onError"
>
{{ $t('user.details-basic-section') }}
@@ -129,12 +143,13 @@ const onCancel = () => {
v-if="mode !== 'new'"
:label="$t('user.id')" :ui="{ wrapper: 'mb-2' }"
>
-
+
{{ stateAsEdit.id || '-' }}
copyId(stateAsEdit.id)"
+ @click="() => copyField(stateAsEdit.id, 'id')"
/>
@@ -146,10 +161,23 @@ const onCancel = () => {
:ui="{ wrapper: 'mb-2' }" :required="mode !== 'view'"
>
+
+ {{ stateAsEdit.userName || '-' }}
+ copyField(stateAsEdit.userName, 'username')"
+ />
+
{
/>
-
-
+
+
+
+ removeField('eppns', index)"
+ />
+
+
+
+ {{ eppn || '-' }}
removeField('eppns', index)"
+ v-if="eppn"
+ icon="i-lucide-copy" variant="ghost" color="neutral"
+ :ui="{ base: 'p-0 ml-2', leadingIcon: 'size-3' }"
+ @click="() => copyField(eppn, 'eppns')"
/>
-
-
+
+
{
/>
-
-
+
+
+
+ removeField('emails', index)"
+ />
+
+
+
+ {{ email || '-' }}
removeField('emails', index)"
+ v-if="email"
+ icon="i-lucide-copy" variant="ghost" color="neutral"
+ :ui="{ base: 'p-0 ml-2', leadingIcon: 'size-3' }"
+ @click="() => copyField(email, 'emails')"
/>
-
-
+
+
{
>
- {{ $t('user.details-affiliation-authority-section') }}
+ {{ currentUser?.isSystemAdmin
+ ? $t('user.details-affiliation-authority-section')
+ : $t('user.details-affiliation-section')
+ }}
+
{
v-model="state.isSystemAdmin"
variant="card" color="error" size="lg"
:ui="{ root: 'py-2 px-3 w-fit', label: 'flex items-center gap-1.5' }"
- :disabled="mode === 'view'"
+ :disabled="!currentUser?.isSystemAdmin"
>
@@ -282,15 +349,16 @@ const onCancel = () => {
@@ -303,7 +371,7 @@ const onCancel = () => {
removeRepositoryRole(index)"
/>
@@ -335,8 +403,8 @@ const onCancel = () => {
>
{
/>
removeGroup(index)"
/>
@@ -354,7 +422,7 @@ const onCancel = () => {
v-if="mode !== 'new'"
:label="$t('user.created')" :ui="{ wrapper: 'mb-2' }"
>
-
+
{{ stateAsEdit.created || '-' }}
@@ -363,12 +431,12 @@ const onCancel = () => {
v-if="mode !== 'new'"
:label="$t('user.last-modified')" :ui="{ wrapper: 'mb-2' }"
>
-
+
{{ stateAsEdit.lastModified || '-' }}
-
+
{
v-if="mode === 'new'"
:label="$t('button.save')"
type="submit" icon="i-lucide-save" color="info" variant="subtle"
+ loading-auto
/>
diff --git a/src/app/composables/api.ts b/src/app/composables/api.ts
new file mode 100644
index 00000000..ecef6565
--- /dev/null
+++ b/src/app/composables/api.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright (C) 2026 National Institute of Informatics.
+ */
+
+const useApiFetch = createUseFetch((currentOptions) => {
+ const { baseURL } = useAppConfig()
+ const { handleFetchError } = useErrorHandling()
+ return {
+ ...currentOptions,
+ baseURL,
+ onResponseError: ({ response }) => handleFetchError({ response }),
+ credentials: 'include',
+ server: false,
+ }
+})
+
+export { useApiFetch }
diff --git a/src/app/composables/errorHandling.ts b/src/app/composables/errorHandling.ts
new file mode 100644
index 00000000..81c9cefa
--- /dev/null
+++ b/src/app/composables/errorHandling.ts
@@ -0,0 +1,98 @@
+import type { FetchResponse } from 'ofetch'
+
+export const createFetchErrorHandler = (
+ $t: ReturnType['t'],
+) => {
+ const route = useRoute()
+ const toast = useToast()
+
+ const { publicRoutes } = useAppConfig()
+ const { checkout } = useAuth()
+
+ return async ({ response }: { response: FetchResponse }) => {
+ const errorId = `error-${response.status}`
+ if (toast.toasts.value.some(t => t.id === errorId)) return
+
+ const baseToast = {
+ id: errorId,
+ color: 'error' as const,
+ icon: 'i-lucide-circle-x',
+ }
+
+ switch (response.status) {
+ case 400: {
+ toast.add({
+ ...baseToast,
+ title: $t('toast.error.bad-request.title'),
+ description: $t('toast.error.bad-request.description'),
+ })
+ break
+ }
+ case 401: {
+ toast.add({
+ ...baseToast,
+ title: $t('toast.error.unauthorized.title'),
+ description: $t('toast.error.unauthorized.description'),
+ })
+ if (!publicRoutes.has(route.path.replace(/\/$/, ''))) {
+ const next = encodeURIComponent(route.fullPath.replace(/\/$/, ''))
+ await checkout({ next })
+ }
+ break
+ }
+ case 403: {
+ toast.add({
+ ...baseToast,
+ title: $t('toast.error.forbidden.title'),
+ description: $t('toast.error.forbidden.description'),
+ })
+ break
+ }
+ case 404: {
+ toast.add({
+ ...baseToast,
+ title: $t('toast.error.not-found.title'),
+ description: $t('toast.error.not-found.description'),
+ })
+ break
+ }
+ case 502: {
+ toast.add({
+ ...baseToast,
+ title: $t('toast.error.bad-gateway.title'),
+ description: $t('toast.error.bad-gateway.description'),
+ })
+ break
+ }
+ case 503: {
+ toast.add({
+ ...baseToast,
+ title: $t('toast.error.service-unavailable.title'),
+ description: $t('toast.error.service-unavailable.description'),
+ })
+ break
+ }
+ default: {
+ const defaultId = 'error-default'
+ if (toast.toasts.value.some(t => t.id === defaultId)) return
+ toast.add({
+ ...baseToast,
+ id: defaultId,
+ title: $t('toast.error.server.title'),
+ description: $t('toast.error.server.description'),
+ })
+ break
+ }
+ }
+ }
+}
+
+const useErrorHandling = () => {
+ const { t: $t } = useI18n()
+
+ const handleFetchError = createFetchErrorHandler($t)
+
+ return { handleFetchError }
+}
+
+export { useErrorHandling }
diff --git a/src/app/composables/forms.ts b/src/app/composables/forms.ts
index 1f07fd0c..8d132e83 100644
--- a/src/app/composables/forms.ts
+++ b/src/app/composables/forms.ts
@@ -15,6 +15,7 @@ const hasViewportReference = (
)
}
+/** Composable to make a select menu support infinite scroll */
const useSelectMenuInfiniteScroll = (
options: UseSelectMenuInfiniteScrollOptions,
): UseSelectMenuInfiniteScrollReturn => {
@@ -24,10 +25,11 @@ const useSelectMenuInfiniteScroll = (
transform,
debounce = 300,
scrollDistance = 10,
- params: parameters = {},
+ query = {},
+ server = true,
} = options
- const page = ref(0)
+ const page = ref(1)
const hasMore = ref(true)
const searchTerm = ref('')
@@ -35,15 +37,16 @@ const useSelectMenuInfiniteScroll = (
const items = ref>([])
- const { data, status, execute } = useFetch>(url, {
- params: computed(() => ({
+ const { data, status, execute } = useApiFetch>(url, {
+ query: computed(() => ({
+ ...query,
q: searchTermDebounced.value || undefined,
p: page.value,
- l: limit,
- ...parameters,
+ l: server ? limit : -1,
})),
lazy: true,
immediate: false,
+ watch: false,
})
watch(data, (newData) => {
@@ -56,6 +59,7 @@ const useSelectMenuInfiniteScroll = (
})
watch(searchTermDebounced, () => {
+ if (!server) return
page.value = 1
hasMore.value = true
execute()
@@ -70,19 +74,18 @@ const useSelectMenuInfiniteScroll = (
const setupInfiniteScroll = (
selectMenuReference: Ref,
) => {
- onMounted(() => {
- // eslint-disable-next-line unicorn/consistent-function-scoping
- const getViewportReference = () => {
- const reference = selectMenuReference.value
- if (Array.isArray(reference)) {
- return reference[0]?.viewportRef
- }
- if (hasViewportReference(reference)) {
- return reference.viewportRef
- }
- return
+ const getViewportReference = () => {
+ const reference = selectMenuReference.value
+ if (Array.isArray(reference)) {
+ return reference[0]?.viewportRef
}
+ if (hasViewportReference(reference)) {
+ return reference.viewportRef
+ }
+ return
+ }
+ onMounted(() => {
useInfiniteScroll(
getViewportReference(),
() => {
@@ -100,14 +103,20 @@ const useSelectMenuInfiniteScroll = (
}
return {
+ /** Items for the select menu */
items,
+ /** Search term for filtering items */
searchTerm,
+ /** Status of the fetch request */
status,
+ /** Callback for when the select menu is opened */
onOpen,
+ /** Setup select menu infinite scroll */
setupInfiniteScroll,
}
}
+/** Provides state and default data for repository forms */
const useRepositoryForm = () => {
const defaultData: Required = {
id: '',
@@ -126,9 +135,17 @@ const useRepositoryForm = () => {
const { id, spConnectorId, created, ...defaultCreateForm } = defaultForm
const stateAsCreate = reactive({ ...defaultCreateForm })
- return { defaultData, state, stateAsCreate }
+ return {
+ /** Default data for repository forms */
+ defaultData,
+ /** Reactive state for repository forms */
+ state,
+ /** Reactive state for create repository forms */
+ stateAsCreate,
+ }
}
+/** Provides schema for repository forms */
const useRepositorySchema = (mode?: MaybeRefOrGetter) => {
const { t: $t } = useI18n()
@@ -139,6 +156,10 @@ const useRepositorySchema = (mode?: MaybeRefOrGetter) => {
serviceUrl: z.string()
.min(1, $t('repository.validation.serviceUrl.required'))
.max(maxUrlLength, $t('repository.validation.serviceUrl.max-length', { max: maxUrlLength }))
+ .regex(
+ /^(?!-)[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,}$/,
+ $t('repository.validation.serviceUrl.invalid'),
+ )
.transform(value => `https://${value}`)
.pipe(z.string().url($t('repository.validation.serviceUrl.invalid'))),
entityIds: z.array(z.string().min(1, $t('repository.validation.entityIds.required')))
@@ -147,12 +168,9 @@ const useRepositorySchema = (mode?: MaybeRefOrGetter) => {
}))
const updateSchema = computed(() => z.object({
- id: z.string().min(1, $t('repository.validation.id.required')),
+ id: z.string(),
serviceName: z.string().min(1, $t('repository.validation.serviceName.required')),
- serviceUrl: z.string()
- .min(1, $t('repository.validation.serviceUrl.required'))
- .transform(value => `https://${value}`)
- .pipe(z.string().url($t('repository.validation.serviceUrl.invalid'))),
+ serviceUrl: z.string(),
entityIds: z.array(z.string().min(1, $t('repository.validation.entityIds.required')))
.nonempty($t('repository.validation.entityIds.at-least-one')),
active: z.boolean(),
@@ -169,9 +187,15 @@ const useRepositorySchema = (mode?: MaybeRefOrGetter) => {
})
: undefined
- return { schema, maxUrlLength }
+ return {
+ /** Schema for repository forms */
+ schema,
+ /** Maximum URL length for repository forms */
+ maxUrlLength,
+ }
}
+/** Provides state and default data for group forms */
const useGroupForm = () => {
const defaultData: Required = {
id: '',
@@ -179,6 +203,7 @@ const useGroupForm = () => {
displayName: '',
description: '',
repository: { id: '', serviceName: '' },
+ type: 'group',
public: false,
memberListVisibility: 'Private',
usersCount: 0,
@@ -188,19 +213,31 @@ const useGroupForm = () => {
const { usersCount, ..._defaultForm } = defaultData
const defaultForm = {
..._defaultForm,
- repository: { id: '', label: '' },
+ repository: { value: undefined, label: undefined },
}
const state = reactive>({ ...defaultForm })
const defaultCreateForm: GroupCreateForm = {
..._defaultForm,
- repository: { id: '', label: '' },
+ repository: { value: undefined, label: undefined },
}
const stateAsCreate = reactive({ ...defaultCreateForm })
- return { defaultData, defaultForm, defaultCreateForm, state, stateAsCreate }
+ return {
+ /** Default data for group forms */
+ defaultData,
+ /** Default form state for group forms */
+ defaultForm,
+ /** Default create form state for group forms */
+ defaultCreateForm,
+ /** Reactive state for group forms */
+ state,
+ /** Reactive state for create group forms */
+ stateAsCreate,
+ }
}
+/** Provides options for group forms */
const useGroupFormOptions = () => {
const { t: $t } = useI18n()
@@ -229,26 +266,49 @@ const useGroupFormOptions = () => {
return { label, value: visibility }
}))
- return { publicStatusOptions, visibilityOptions }
+ return {
+ /** Select menu items for public status */
+ publicStatusOptions,
+ /** Select menu items for member list visibility */
+ visibilityOptions,
+ }
}
+/** Provides schema for group forms */
const useGroupSchema = (mode?: MaybeRefOrGetter) => {
const { t: $t } = useI18n()
- const { groups: { maxUrlLength } } = useAppConfig()
- const getMaxIdLength = (repositoryId: string) => maxUrlLength - repositoryId.length
+ const { groups: { maxIdLength } } = useAppConfig()
+ const getMaxIdLength = (repositoryId: string) => maxIdLength - repositoryId.length
const createSchema = computed(() => z.object({
- userDefinedId: z.string().optional(),
+ userDefinedId: z.string()
+ .min(1, $t('group.validation.groupId.required'))
+ .regex(/^[a-zA-Z0-9._-]+$/, $t('group.validation.groupId.invalid-format')),
displayName: z.string().min(1, $t('group.validation.displayName.required')),
description: z.string().optional(),
repository: z.object({
- id: z.string().min(1, $t('group.validation.repository.id.required')),
+ value: z.string({
+ // eslint-disable-next-line camelcase
+ required_error: $t('group.validation.repository.id.required'),
+ }).min(1, $t('group.validation.repository.id.required')),
}),
public: z.boolean().default(false),
memberListVisibility: z.enum(VISIBILITY_OPTIONS, {
errorMap: () => ({ message: $t('group.validation.memberListVisibility.invalid') }),
- }).default('Hidden'),
+ }).default('Private'),
+ }).superRefine((data, context) => {
+ const maxIdLength = getMaxIdLength(data.repository?.value || '')
+ if (data.userDefinedId && data.userDefinedId.length > maxIdLength) {
+ context.addIssue({
+ code: z.ZodIssueCode.too_big,
+ maximum: maxIdLength,
+ type: 'string',
+ path: ['userDefinedId'],
+ inclusive: true,
+ message: $t('group.validation.groupId.max-length', { max: maxIdLength }),
+ })
+ }
}))
const updateSchema = computed(() => z.object({
@@ -257,7 +317,7 @@ const useGroupSchema = (mode?: MaybeRefOrGetter) => {
public: z.boolean().default(false),
memberListVisibility: z.enum(VISIBILITY_OPTIONS, {
errorMap: () => ({ message: $t('group.validation.memberListVisibility.invalid') }),
- }).default('Hidden'),
+ }).default('Private'),
}))
const getSchemaByMode = (m: FormMode) => {
@@ -271,16 +331,22 @@ const useGroupSchema = (mode?: MaybeRefOrGetter) => {
})
: undefined
- return { schema, getMaxIdLength }
+ return {
+ /** Schema for group forms */
+ schema,
+ /** Get the maximum ID length based on the repository ID */
+ getMaxIdLength,
+ }
}
+/** Provides reactive state and default data for user forms */
const useUserForm = () => {
const defaultData: Required = {
id: '',
eppns: [''],
userName: '',
emails: [''],
- preferredLanguage: '' as PreferredLanguage,
+ preferredLanguage: undefined as unknown as PreferredLanguage,
isSystemAdmin: false,
repositoryRoles: [{ id: '', serviceName: '', userRole: undefined }],
groups: [{ id: '', displayName: '' }],
@@ -290,17 +356,29 @@ const useUserForm = () => {
const { repositoryRoles, groups, ..._defaultForm } = defaultData
const defaultForm: UserForm = {
..._defaultForm,
- repositoryRoles: [{ id: '', label: '', userRole: undefined }],
- groups: [{ id: '', label: '' }],
+ repositoryRoles: [{ value: undefined, label: undefined, userRole: undefined }],
+ groups: [{ value: undefined, label: undefined }],
}
const state = reactive({ ...defaultForm })
const { id, created, lastModified, ...defaultCreateForm } = defaultForm
const stateAsCreate = reactive({ ...defaultCreateForm })
- return { defaultData, defaultForm, state, stateAsCreate }
+ return {
+ /** Default data for user forms */
+ defaultData,
+ /** Default form state for user forms */
+ defaultForm,
+ /** Default create form state for user forms */
+ defaultCreateForm,
+ /** Reactive state for user forms */
+ state,
+ /** Reactive state for create user forms */
+ stateAsCreate,
+ }
}
+/** Provides options for user forms */
const useUserFormOptions = () => {
const { t: $t } = useI18n()
@@ -330,9 +408,18 @@ const useUserFormOptions = () => {
}))
})
- return { preferredLanguageOptions, userRoleOptions }
+ return {
+ /** Select menu items for preferred language */
+ preferredLanguageOptions,
+ /** Select menu items for user roles */
+ userRoleOptions,
+ }
}
+/**
+ * Provides schema for user forms
+ * @param mode form mode to return the corresponding schema.
+ */
const useUserSchema = (mode?: MaybeRefOrGetter) => {
const { t: $t } = useI18n()
const userRoles = Object.keys(USER_ROLES) as [string, ...string[]]
@@ -348,16 +435,16 @@ const useUserSchema = (mode?: MaybeRefOrGetter) => {
).nonempty($t('user.validation.emails.at-least-one')),
preferredLanguage: z.enum(PREFERRED_LANGUAGE, {
errorMap: () => ({ message: $t('user.validation.preferredLanguage.invalid') }),
- }).optional(),
+ }).optional().nullable(),
isSystemAdmin: z.boolean().default(false),
repositoryRoles: z.array(z.object({
- id: z.string().optional().default(''),
+ value: z.string().optional(),
userRole: z.enum(userRoles).optional(),
})),
- groups: z.array(z.object({ id: z.string() })).optional(),
+ groups: z.array(z.object({ value: z.string().optional() })).optional(),
}).superRefine((data, context) => {
if (data.isSystemAdmin === true) {
- const hasFilledRole = data.repositoryRoles.some(role => role.id || role.userRole)
+ const hasFilledRole = data.repositoryRoles.some(role => role.value || role.userRole)
if (hasFilledRole) {
context.addIssue({
code: z.ZodIssueCode.custom,
@@ -365,9 +452,35 @@ const useUserSchema = (mode?: MaybeRefOrGetter) => {
path: ['repositoryRoles'],
})
}
+ if (data.groups && data.groups.some(group => group.value)) {
+ context.addIssue({
+ code: z.ZodIssueCode.custom,
+ message: $t('user.validation.groups.must-be-empty-for-system-admin'),
+ path: ['groups'],
+ })
+ }
}
else {
- const hasValidRole = data.repositoryRoles.some(role => role.id && role.userRole)
+ for (const [index, role] of data.repositoryRoles.entries()) {
+ if (role.value || role.userRole) {
+ if (!role.value || role.value.length === 0) {
+ context.addIssue({
+ code: z.ZodIssueCode.custom,
+ message: $t('user.validation.repositoryRoles.id.required'),
+ path: ['repositoryRoles', index, 'id'],
+ })
+ }
+ if (!role.userRole) {
+ context.addIssue({
+ code: z.ZodIssueCode.custom,
+ message: $t('user.validation.repositoryRoles.userRole.required'),
+ path: ['repositoryRoles', index, 'userRole'],
+ })
+ }
+ }
+ }
+
+ const hasValidRole = data.repositoryRoles.some(role => role.value && role.userRole)
if (!hasValidRole) {
context.addIssue({
code: z.ZodIssueCode.custom,
@@ -375,10 +488,42 @@ const useUserSchema = (mode?: MaybeRefOrGetter) => {
path: ['repositoryRoles'],
})
}
+ }
+ }))
+ const updateSchema = computed(() => z.object({
+ eppns: z.array(z.string().optional()).optional(),
+ userName: z.string().optional(),
+ emails: z.array(z.string().optional()).optional(),
+ preferredLanguage: z.string().optional().nullable(),
+ isSystemAdmin: z.boolean().default(false),
+ repositoryRoles: z.array(z.object({
+ value: z.string().optional(),
+ userRole: z.enum(userRoles).optional(),
+ })),
+ groups: z.array(z.object({ value: z.string().optional() })).optional(),
+ }).superRefine((data, context) => {
+ if (data.isSystemAdmin === true) {
+ const hasFilledRole = data.repositoryRoles.some(role => role.value || role.userRole)
+ if (hasFilledRole) {
+ context.addIssue({
+ code: z.ZodIssueCode.custom,
+ message: $t('user.validation.repositoryRoles.must-be-empty-for-system-admin'),
+ path: ['repositoryRoles'],
+ })
+ }
+ if (data.groups && data.groups.some(group => group.value)) {
+ context.addIssue({
+ code: z.ZodIssueCode.custom,
+ message: $t('user.validation.groups.must-be-empty-for-system-admin'),
+ path: ['groups'],
+ })
+ }
+ }
+ else {
for (const [index, role] of data.repositoryRoles.entries()) {
- if (role.id || role.userRole) {
- if (!role.id || role.id.length === 0) {
+ if (role.value || role.userRole) {
+ if (!role.value || role.value.length === 0) {
context.addIssue({
code: z.ZodIssueCode.custom,
message: $t('user.validation.repositoryRoles.id.required'),
@@ -394,15 +539,20 @@ const useUserSchema = (mode?: MaybeRefOrGetter) => {
}
}
}
+
+ const hasValidRole = data.repositoryRoles.some(role => role.value && role.userRole)
+ if (!hasValidRole) {
+ context.addIssue({
+ code: z.ZodIssueCode.custom,
+ message: $t('user.validation.repositoryRoles.at-least-one'),
+ path: ['repositoryRoles'],
+ })
+ }
}
}))
- const updateSchema = computed(() => ({} as unknown))
-
const getSchemaByMode = (m: FormMode) => {
- return m === 'new'
- ? createSchema.value
- : updateSchema.value as Record
+ return m === 'new' ? createSchema.value : updateSchema.value
}
const schema = mode
@@ -412,24 +562,30 @@ const useUserSchema = (mode?: MaybeRefOrGetter) => {
})
: undefined
- return { schema }
+ return {
+ /** Schema for user forms */
+ schema,
+ }
}
+/** Provides form error handling */
const useFormError = () => {
const { t: $t } = useI18n()
const toast = useToast()
const handleFormError = (event: FormErrorEvent) => {
toast.add({
- title: $t('error.validation.title'),
- description: $t('error.validation.description'),
+ title: $t('toast.error.validation.title'),
+ description: $t('toast.error.validation.description'),
color: 'error',
+ icon: 'i-lucide-circle-x',
})
focusFirstError(event)
}
return {
+ /** Show form error toast and focus the first error field */
handleFormError,
}
}
diff --git a/src/app/composables/globalSearch.ts b/src/app/composables/globalSearch.ts
new file mode 100644
index 00000000..e83eced9
--- /dev/null
+++ b/src/app/composables/globalSearch.ts
@@ -0,0 +1,76 @@
+/**
+ * Composable for global search operations
+ */
+
+import type { CommandPaletteGroup, CommandPaletteItem } from '@nuxt/ui'
+
+const useGlobalSearch = () => {
+ const { t: $t } = useI18n()
+ const { header: { globalSearch } } = useAppConfig()
+
+ const searchTerm = ref('')
+ const previousSearchTerm = ref('')
+ const query = computed(() =>
+ previousSearchTerm.value ? { q: previousSearchTerm.value, l: globalSearch.limit } : undefined,
+ )
+
+ const makeResultGroups = (result: GlobalSearchResults): CommandPaletteGroup[] => [
+ {
+ id: 'repositories',
+ label: $t('header.global-search.matching', {
+ searchTerm: previousSearchTerm.value,
+ category: $t('repositories.title'),
+ }),
+ items: result.find(item => item.type === 'repositories')?.resources
+ .map(item => ({
+ id: `repository-${item.id}`,
+ label: item.serviceName,
+ suffix: item.serviceUrl,
+ icon: 'i-lucide-folder',
+ to: `/repositories/${item.id}`,
+ })) || [],
+ ignoreFilter: true,
+ },
+ {
+ id: 'groups',
+ label: $t('header.global-search.matching', {
+ searchTerm: previousSearchTerm.value,
+ category: $t('groups.title'),
+ }),
+ items: result.find(item => item.type === 'groups')?.resources
+ .map(item => ({
+ id: `group-${item.id}`,
+ label: item.displayName,
+ suffix: item.usersCount ? `${item.usersCount} users` : undefined,
+ icon: 'i-lucide-users',
+ to: `/groups/${item.id}`,
+ })) || [],
+ ignoreFilter: true,
+ },
+ {
+ id: 'users',
+ label: $t('header.global-search.matching', {
+ searchTerm: previousSearchTerm.value,
+ category: $t('users.title'),
+ }),
+ items: result.find(item => item.type === 'users')?.resources
+ .map(item => ({
+ id: `user-${item.id}`,
+ label: item.userName,
+ description: item.eppns?.[0],
+ icon: 'i-lucide-user',
+ to: `/users/${item.id}`,
+ })) || [],
+ ignoreFilter: true,
+ },
+ ]
+
+ return {
+ searchTerm,
+ previousSearchTerm,
+ query,
+ makeResultGroups,
+ }
+}
+
+export { useGlobalSearch }
diff --git a/src/app/composables/groupCaches.ts b/src/app/composables/groupCaches.ts
new file mode 100644
index 00000000..e739331f
--- /dev/null
+++ b/src/app/composables/groupCaches.ts
@@ -0,0 +1,246 @@
+/**
+ * Composable for managing cache groups.
+ */
+import { UCheckbox, ULink } from '#components'
+
+import type { Row, Table } from '@tanstack/table-core'
+import type { DropdownMenuItem, SelectItem, TableColumn } from '@nuxt/ui'
+
+const useCacheGroups = () => {
+ const route = useRoute()
+ const router = useRouter()
+
+ const { t: $t } = useI18n()
+
+ /** Reactive query object */
+ const query = computed(() => normalizeCacheGroupsQuery(route.query))
+ /** Update query parameters and push to router */
+ const updateQuery = (newQuery: Partial) => {
+ router.push({
+ query: {
+ ...route.query,
+ ...newQuery,
+ },
+ })
+ }
+
+ const searchTerm = ref(query.value.q)
+ const filter = ref(query.value.f)
+ const pageNumber = ref(query.value.p)
+ const pageSize = ref(query.value.l)
+
+ const searchIdentityKey = computed(() => {
+ const { p, l, ...filters } = query.value
+ return JSON.stringify(filters)
+ })
+
+ const selectedMap = useState>(
+ `selection-group-caches:${searchIdentityKey.value}`, () => ({}),
+ )
+
+ const selectedCount = computed(() => {
+ return Object.values(selectedMap.value).filter(value => value !== undefined).length
+ })
+ const toggleSelection = (event: Event | undefined, row: Row) => {
+ selectedMap.value[row.original.id]
+ = selectedMap.value[row.original.id] ? undefined : row.original
+ }
+ const toggleAllPageRows = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ const allSelected = pageRows.every(row => selectedMap.value[row.original.id] !== undefined)
+
+ if (allSelected) {
+ for (const row of pageRows) {
+ selectedMap.value[row.original.id] = undefined
+ }
+ }
+ else {
+ for (const row of pageRows) {
+ selectedMap.value[row.original.id] = row.original
+ }
+ }
+ }
+ const isAllPageRowsSelected = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ return pageRows.length > 0 && pageRows.every(
+ row => selectedMap.value[row.original.id] !== undefined,
+ )
+ }
+ const isSomePageRowsSelected = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ const selectedRows = pageRows.filter(row => selectedMap.value[row.original.id] !== undefined)
+ return selectedRows.length > 0 && selectedRows.length < pageRows.length
+ }
+
+ const getSelected = (): { id: string, serviceName: string, serviceUrl: string }[] => {
+ return Object.entries(selectedMap.value)
+ .filter(([_, service]) => service !== undefined)
+ .map(([id, service]) => ({
+ id, serviceName: service!.serviceName, serviceUrl: service!.serviceUrl,
+ }))
+ }
+ const clearSelection = () => {
+ selectedMap.value = {}
+ }
+
+ const modals = reactive>({
+ 'all': false,
+ 'id-specified': false,
+ })
+ const isUpdating = ref(false)
+
+ /** Column names with translations */
+ const columnNames = computed(() => ({
+ id: '#',
+ serviceName: $t('group-caches.table.column.repository-name'),
+ serviceUrl: $t('group-caches.table.column.repository-url'),
+ updated: $t('group-caches.table.column.repository-updated-at'),
+ }))
+
+ const filterItems = computed(() => [
+ {
+ label: $t('group-caches.status.cached'),
+ value: 'e' as GroupCacheStatus,
+ },
+ {
+ label: $t('group-caches.status.no-cached'),
+ value: 'n' as GroupCacheStatus,
+ },
+ ])
+
+ const selectedRepositoriesAction = computed<[DropdownMenuItem, ...DropdownMenuItem[]]>(() => [
+ {
+ type: 'label' as const,
+ label: $t('repositories.all-repositories-actions'),
+ },
+ {
+ icon: 'i-lucide-refresh-cw',
+ label: $t('group-caches.button.update-all-repositories'),
+ onSelect: () => modals.all = true,
+ },
+ {
+ type: 'separator' as const,
+ },
+ {
+ type: 'label' as const,
+ label: $t('repositories.selected-repositories-actions'),
+ },
+ {
+ icon: 'i-lucide-refresh-cw',
+ label: $t('group-caches.button.update-selected-repositories'),
+ onSelect: () => modals['id-specified'] = true,
+ disabled: selectedCount.value === 0,
+ },
+ ])
+
+ type CacheGroupsTableColumn = TableColumn
+ const columns = computed(() => [
+ {
+ id: 'select',
+ header: ({ table }) =>
+ h(UCheckbox, {
+ 'modelValue': isSomePageRowsSelected(table)
+ ? 'indeterminate'
+ : isAllPageRowsSelected(table),
+ 'onUpdate:modelValue': () => toggleAllPageRows(table),
+ 'ui': { root: 'py-0.5' },
+ 'disabled': isUpdating.value,
+ 'aria-label': 'Select all',
+ }),
+ cell: ({ row }) =>
+ h(UCheckbox, {
+ 'modelValue': selectedMap.value[row.original.id] !== undefined,
+ 'onUpdate:modelValue': () => toggleSelection(undefined, row),
+ 'disabled': isUpdating.value,
+ 'aria-label': 'Select row',
+ }),
+ enableHiding: false,
+ },
+ {
+ accessorKey: 'serviceName',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' }, columnNames.value.serviceName,
+ ),
+ cell: ({ row }) => h(
+ ULink, {
+ to: `/repositories/${row.original.id}`,
+ class: 'font-bold hover:underline inline-flex items-center',
+ }, () => [
+ h('span', row.original.serviceName),
+ ],
+
+ ),
+ },
+ {
+ accessorKey: 'url',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' }, columnNames.value.serviceUrl,
+ ),
+ },
+ {
+ accessorKey: 'updated',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' }, columnNames.value.updated,
+ ),
+ cell: ({ row }) =>
+ row.original.updated
+ ? datetimeFormatter.format(new Date(row.original.updated))
+ : $t('group-caches.status.no-cached'),
+ },
+ ])
+
+ const makePageInfo = (result: Ref) => {
+ return computed(() => {
+ const start = result.value?.offset ?? 1
+ const total = result.value?.total ?? 0
+ const end = Math.min(start + pageSize.value!, total)
+ const count = selectedCount.value
+
+ if (count > 0)
+ return `${start} - ${end} / ${total} (${$t('table.selected')} ${count})`
+ return `${start} - ${end} / ${total}`
+ })
+ }
+
+ return {
+ /** Computed reference for the current query */
+ query,
+ /** Update query parameters and push to router */
+ updateQuery,
+ /** Criteria for filtering and sorting repositories */
+ criteria: {
+ /** Reactive object for the search term */
+ searchTerm,
+ /** Reactive object for the filter */
+ filter,
+ /** Reactive object for the current page number */
+ pageNumber,
+ /** Reactive object for the page size */
+ pageSize,
+ },
+ /** Flag indicating if the data is being updated */
+ isUpdating,
+ /** Reactive object for the selected repositories */
+ selectedMap,
+ /** Computed reference for the count of selected repositories */
+ selectedCount,
+ /** Toggle the selection of a repository */
+ toggleSelection,
+ /** Get the selected repositories */
+ getSelected,
+ /** Clear all selection */
+ clearSelection,
+ /** Dropdown items of actions for the selected repositories */
+ selectedRepositoriesAction,
+ /** Items for filtering the repositories */
+ filterItems,
+ /** Column definitions for the table with translations */
+ columns,
+ /** Make indicator for the page information */
+ makePageInfo,
+ /** Reactive object for the state of modals */
+ modals,
+ }
+}
+
+export { useCacheGroups }
diff --git a/src/app/composables/groups.ts b/src/app/composables/groups.ts
index 29580ffb..fbd79913 100644
--- a/src/app/composables/groups.ts
+++ b/src/app/composables/groups.ts
@@ -4,9 +4,10 @@
import { UButton, UCheckbox, UDropdownMenu, ULink } from '#components'
-import type { Row } from '@tanstack/table-core'
+import type { Row, Table } from '@tanstack/table-core'
import type { ButtonProps, DropdownMenuItem, TableColumn, TableRow } from '@nuxt/ui'
+/** Composable for managing groups table */
const useGroupsTable = () => {
const route = useRoute()
@@ -14,9 +15,13 @@ const useGroupsTable = () => {
const { t: $t } = useI18n()
const { copy } = useClipboard()
- /** Reactive query object */
+ const {
+ table: { pageSize: pageSizeConfig },
+ features: { groups: { 'sort-columns': sortColumns },
+ repositories: { 'server-search': serverSearch } },
+ } = useAppConfig()
+
const query = computed(() => normalizeGroupsQuery(route.query))
- /** Update query parameters and push to router */
const updateQuery = async (newQuery: Partial) => {
await navigateTo({
query: {
@@ -33,23 +38,63 @@ const useGroupsTable = () => {
const pageSize = ref(query.value.l)
const searchIdentityKey = computed(() => {
+ // exclude pagination and sorting parameters
const { k, d, p, l, ...filters } = query.value
return JSON.stringify(filters)
})
- const selectedMap = useState>(
+ const selectedMap = useState>(
`selection-groups:${searchIdentityKey.value}`, () => ({}),
)
- /** Number of selected groups */
const selectedCount = computed(() => {
- return Object.values(selectedMap.value).filter(value => value === true).length
+ return Object.values(selectedMap.value).filter(value => value !== undefined).length
})
+ /** Toggle the selection of a group */
const toggleSelection = (event: Event | undefined, row: Row) => {
- selectedMap.value[row.id] = !selectedMap.value[row.id]
- row.toggleSelected(selectedMap.value[row.id])
+ selectedMap.value[row.original.id]
+ = selectedMap.value[row.original.id] ? undefined : row.original.displayName
+ }
+ const toggleAllPageRows = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ const allSelected = pageRows.every(row => selectedMap.value[row.original.id] !== undefined)
+
+ if (allSelected) {
+ for (const row of pageRows) {
+ selectedMap.value[row.original.id] = undefined
+ }
+ }
+ else {
+ for (const row of pageRows) {
+ selectedMap.value[row.original.id] = row.original.displayName
+ }
+ }
+ }
+ const isAllPageRowsSelected = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ return pageRows.length > 0 && pageRows.every(
+ row => selectedMap.value[row.original.id] !== undefined,
+ )
+ }
+ const isSomePageRowsSelected = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ const selectedRows = pageRows.filter(row => selectedMap.value[row.original.id] !== undefined)
+ return selectedRows.length > 0 && selectedRows.length < pageRows.length
}
+ const getSelected = (): { id: string, displayName: string }[] => {
+ return Object.entries(selectedMap.value)
+ .filter(([_, displayName]) => displayName !== undefined)
+ .map(([id, displayName]) => ({ id, displayName: displayName! }))
+ }
+ const clearSelection = () => {
+ selectedMap.value = {}
+ }
+
+ const modals = reactive({
+ delete: false,
+ })
+
/** Column names with translations */
const columnNames = computed>(() => ({
id: '#',
@@ -64,14 +109,14 @@ const useGroupsTable = () => {
false: $t('groups.table.cell.public.private'),
}))
- const visibilityStatus = computed(() => ({
+ const visibilityStatus = computed>(() => ({
Public: $t('groups.table.cell.visibility.public'),
Private: $t('groups.table.cell.visibility.private'),
Hidden: $t('groups.table.cell.visibility.hidden'),
}))
/** Returns action buttons for a group entity */
- const creationButtons = computed(() => [
+ const creationButtons = computed<[ButtonProps, ...ButtonProps[]]>(() => [
{
icon: 'i-lucide-plus',
label: $t('button.create-new'),
@@ -82,7 +127,7 @@ const useGroupsTable = () => {
])
/** Actions to display when the list is empty */
- const emptyActions = computed(() => [
+ const emptyActions = computed<[ButtonProps, ...ButtonProps[]]>(() => [
{
icon: 'i-lucide-refresh-cw',
label: $t('button.reload'),
@@ -93,13 +138,17 @@ const useGroupsTable = () => {
])
/** Actions for selected groups */
- const selectedGroupsActions = computed(() => [
+ const selectedGroupsActions = computed<[DropdownMenuItem, ...DropdownMenuItem[]]>(() => [
+ {
+ type: 'label' as const,
+ label: $t('groups.selected-groups-actions'),
+ },
{
icon: 'i-lucide-trash',
label: $t('groups.delete-selected-button'),
- onClick: () => {
- // TODO: Delete selected groups
- },
+ color: 'error',
+ onSelect: () => modals.delete = true,
+ disabled: selectedCount.value === 0,
},
])
@@ -109,15 +158,15 @@ const useGroupsTable = () => {
id: 'select',
header: ({ table }) =>
h(UCheckbox, {
- 'modelValue': table.getIsSomePageRowsSelected()
+ 'modelValue': isSomePageRowsSelected(table)
? 'indeterminate'
- : table.getIsAllPageRowsSelected(),
- 'onUpdate:modelValue': value => table.toggleAllPageRowsSelected(!!value),
+ : isAllPageRowsSelected(table),
+ 'onUpdate:modelValue': () => toggleAllPageRows(table),
'aria-label': 'Select all',
}),
cell: ({ row }) =>
h(UCheckbox, {
- 'modelValue': row.getIsSelected(),
+ 'modelValue': selectedMap.value[row.original.id] !== undefined,
'onUpdate:modelValue': () => toggleSelection(undefined, row),
'aria-label': 'Select row',
}),
@@ -125,17 +174,21 @@ const useGroupsTable = () => {
},
{
accessorKey: 'id',
- header: () => sortableHeader('id'),
+ header: () => sortColumns
+ ? sortableHeader('id')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.id),
},
{
accessorKey: 'displayName',
- header: () => sortableHeader('displayName'),
+ header: () => sortColumns
+ ? sortableHeader('displayName')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.displayName),
cell: ({ row }) => {
const name: string = row.original.displayName
return h(ULink, {
to: `/groups/${row.original.id}`,
class: 'font-bold hover:underline inline-flex items-center',
- }, [
+ }, () => [
h('span', name),
])
},
@@ -143,14 +196,19 @@ const useGroupsTable = () => {
},
{
accessorKey: 'public',
- header: () => sortableHeader('public'),
+ header: () => sortColumns
+ ? sortableHeader('public')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.public),
cell: ({ row }) => (
publicStatus.value[`${row.original.public}`]
),
},
{
accessorKey: 'memberListVisibility',
- header: () => sortableHeader('memberListVisibility'),
+ header: () => sortColumns
+ ? sortableHeader('memberListVisibility')
+ : h('span', { class: 'text-xs text-default font-medium' },
+ columnNames.value.memberListVisibility),
cell: ({ row }) => (
visibilityStatus.value[row.original.memberListVisibility]
),
@@ -170,7 +228,6 @@ const useGroupsTable = () => {
'div',
{ class: 'text-right' },
h(
- // @ts-expect-error: props type mismatch
UDropdownMenu,
{
'content': { align: 'end' },
@@ -229,7 +286,8 @@ const useGroupsTable = () => {
copy(row.original.id)
toast.add({
- title: $t('groups.actions.copy-id-success'),
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-group-id.description'),
color: 'success',
icon: 'i-lucide-circle-check',
})
@@ -255,24 +313,49 @@ const useGroupsTable = () => {
const columnVisibility = ref({ id: false })
- const makeAttributeFilters = (data: Ref) => {
+ const makeAttributeFilters = (
+ data: Ref,
+ {
+ repositorySelect,
+ }: { [key in 'repositorySelect']: { ref: Ref, url: string } },
+ ) => {
+ const {
+ items: repositoryItems,
+ searchTerm: repoSearchTerm,
+ status: repoSearchStatus,
+ onOpen: onRepoOpen,
+ setupInfiniteScroll: setupRepoScroll,
+ } = useSelectMenuInfiniteScroll({
+ url: repositorySelect.url,
+ limit: pageSizeConfig.repositories[0],
+ server: serverSearch,
+ transform: repository => ({
+ label: repository.serviceName,
+ value: repository.id,
+ }),
+ })
+ setupRepoScroll(repositorySelect.ref)
+
const options = computed(() => (
Object.fromEntries(data.value?.map(option => [option.key, option]) ?? [],
) as Record
))
- const filters = computed(() => [
- {
- key: 'r',
- placeholder: $t('repositories.title'),
- icon: 'i-lucide-folder',
- items: options.value.r.items ?? [],
- multiple: options.value.r.multiple ?? false,
- searchInput: true,
- onUpdated: (values: unknown) => {
- updateQuery({ r: (values as { value: string }[]).map(v => v.value), p: 1 })
- },
+ const repositoryFilter = computed(() => ({
+ key: 'repositorySelect',
+ placeholder: $t('repositories.title'),
+ icon: 'i-lucide-folder',
+ items: repositoryItems.value,
+ multiple: options.value.r.multiple ?? false,
+ searchTerm: repoSearchTerm,
+ loading: repoSearchStatus.value === 'pending',
+ onOpen: onRepoOpen,
+ onUpdated: (values: unknown) => {
+ updateQuery({ r: (values as { value: string }[]).map(v => v.value), p: 1 })
},
+ }))
+
+ const filters = computed(() => [
{
key: 's',
placeholder: $t('groups.table.column.public'),
@@ -308,7 +391,7 @@ const useGroupsTable = () => {
},
])
- return filters
+ return { repositoryFilter, filters }
}
const makePageInfo = (result: Ref) => {
@@ -325,26 +408,51 @@ const useGroupsTable = () => {
}
return {
+ /** Computed reference for the current query */
query,
+ /** Update query parameters and push to router */
updateQuery,
+ /** Criteria for filtering and sorting groups */
criteria: {
+ /** Reactive object for the search term */
searchTerm,
+ /** Computed reference for the sort key */
sortKey,
+ /** Computed reference for the sort order */
sortOrder,
+ /** Reactive object for the current page number */
pageNumber,
+ /** Reactive object for the page size */
pageSize,
},
+ /** Column names for the table with translations */
columnNames,
+ /** Reactive object for the selected groups */
selectedMap,
+ /** Computed reference for the count of selected groups */
selectedCount,
+ /** Toggle selection of a group */
toggleSelection,
+ /** Get selected groups as an array of id and displayName */
+ getSelected,
+ /** Clear all selections */
+ clearSelection,
+ /** Dropdown items of actions for the selected groups */
selectedGroupsActions,
+ /** Button properties for creating a new group */
creationButtons,
+ /** Button properties for empty actions */
emptyActions,
+ /** Column definitions for the table with translations */
columns,
+ /** Reactive object for the visibility of columns */
columnVisibility,
+ /** Make attribute filters for table columns */
makeAttributeFilters,
+ /** Make indicator for the page information */
makePageInfo,
+ /** Reactive object for the state of modals */
+ modals,
}
}
diff --git a/src/app/composables/repositories.ts b/src/app/composables/repositories.ts
index 8ccf3926..b7bbd4ca 100644
--- a/src/app/composables/repositories.ts
+++ b/src/app/composables/repositories.ts
@@ -6,6 +6,9 @@ import { UButton, UDropdownMenu, UIcon, ULink } from '#components'
import type { ButtonProps, DropdownMenuItem, TableColumn, TableRow } from '@nuxt/ui'
+const { features: { repositories: { 'sort-columns': sortColumns } } } = useAppConfig()
+
+/** Composable for managing repositories table */
const useRepositoriesTable = () => {
const route = useRoute()
@@ -42,7 +45,7 @@ const useRepositoriesTable = () => {
}))
/** Returns action buttons for a repository entry */
- const creationButtons = computed(() => [
+ const creationButtons = computed<[ButtonProps, ...ButtonProps[]]>(() => [
{
icon: 'i-lucide-plus',
label: $t('button.create-new'),
@@ -53,7 +56,7 @@ const useRepositoriesTable = () => {
])
/** Actions to display when the list is empty */
- const emptyActions = computed(() => [
+ const emptyActions = computed<[ButtonProps, ...ButtonProps[]]>(() => [
{
icon: 'i-lucide-refresh-cw',
label: $t('button.reload'),
@@ -67,12 +70,17 @@ const useRepositoriesTable = () => {
const columns = computed(() => [
{
accessorKey: 'id',
- header: () => sortableHeader('id'),
+ header: () => sortColumns
+ ? sortableHeader('id')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.id),
cell: ({ row }) => row.original.spConnectorId,
+ enableGlobalFilter: false,
},
{
accessorKey: 'serviceName',
- header: () => sortableHeader('serviceName'),
+ header: () => sortColumns
+ ? sortableHeader('serviceName')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.serviceName),
cell: ({ row }) => {
const name: string = row.original.serviceName
return h(ULink, {
@@ -86,25 +94,40 @@ const useRepositoriesTable = () => {
},
{
accessorKey: 'serviceUrl',
- header: () => sortableHeader('serviceUrl'),
+ header: () => sortColumns
+ ? sortableHeader('serviceUrl')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.serviceUrl),
cell: ({ row }) => {
const url: string = row.original.serviceUrl
return url
? h(ULink, {
to: url,
target: '_blank',
- class: 'hover:underline inline-flex items-center gap-1',
+ class: 'hover:underline inline-flex items-center gap-1 w-full',
}, () => [
- h('span', url),
+ h('span', { class: 'truncate' }, url),
h(UIcon, { name: 'i-lucide-external-link', class: 'size-3 shrink-0' }),
])
: undefined
},
+ meta: {
+ class: {
+ td: 'max-w-xs',
+ },
+ },
},
{
accessorKey: 'entityIds',
- header: () => sortableHeader('entityIds'),
+ accessorFn: row => row.entityIds?.[0],
+ header: () => sortColumns
+ ? sortableHeader('entityIds')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.entityIds),
cell: ({ row }) => row.original.entityIds?.[0],
+ meta: {
+ class: {
+ td: 'max-w-xs truncate',
+ },
+ },
},
{
id: 'actions',
@@ -114,7 +137,6 @@ const useRepositoriesTable = () => {
'div',
{ class: 'text-right' },
h(
- // @ts-expect-error: props type mismatch
UDropdownMenu,
{
'content': { align: 'end' },
@@ -172,7 +194,8 @@ const useRepositoriesTable = () => {
copy(row.original.serviceUrl)
toast.add({
- title: $t('repository.actions.copy-url-success'),
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-url.description'),
color: 'success',
icon: 'i-lucide-circle-check',
})
@@ -185,7 +208,8 @@ const useRepositoriesTable = () => {
copy(row.original.spConnectorId!)
toast.add({
- title: $t('repositories.actions.copy-sp-connector-id-success'),
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-sp-connector-id.description'),
color: 'success',
icon: 'i-lucide-circle-check',
})
@@ -216,21 +240,36 @@ const useRepositoriesTable = () => {
}
return {
+ /** Computed reference for the current query */
query,
+ /** Update query parameters and push to router */
updateQuery,
+ /** Criteria for filtering and sorting repositories */
criteria: {
+ /** Reactive object for the search term */
searchTerm,
+ /** Reactive object for the SP connector ID */
spConnectorId,
+ /** Computed reference for the sort key */
sortKey,
+ /** Computed reference for the sort order */
sortOrder,
+ /** Reactive object for the current page number */
pageNumber,
+ /** Reactive object for the number of items per page */
pageSize,
},
+ /** Button properties for creating new repositories */
creationButtons,
+ /** Button properties for actions when the list is empty */
emptyActions,
+ /** Column definitions for the table with translations */
columns,
+ /** Column names for the table with translations */
columnNames,
+ /** Reactive object for the visibility of columns */
columnVisibility,
+ /** Make indicator for the page information */
makePageInfo,
}
}
diff --git a/src/app/composables/useAuth.ts b/src/app/composables/useAuth.ts
index 215b27c3..0e06e075 100644
--- a/src/app/composables/useAuth.ts
+++ b/src/app/composables/useAuth.ts
@@ -8,7 +8,7 @@ import type { RouteLocationNormalizedGeneric } from 'vue-router'
* Composable for managing authentication state and actions
*/
export function useAuth() {
- const router = useRouter()
+ const { $api } = useNuxtApp()
const { publicRoutes, loginRoute, loggedinRedirectRoute } = useAppConfig()
const authStore = useAuthStore()
@@ -26,15 +26,19 @@ export function useAuth() {
const toPath = to.path.replace(/\/$/, '')
const fromPath = from.path.replace(/\/$/, '')
- if (publicRoutes.has(to.path.replace(/\/$/, ''))) {
+ if (publicRoutes.has(toPath)) {
return
}
if (!authChecked.value || fromPath === loginRoute) {
try {
- const user = await $fetch('/api/auth/check', { method: 'GET' })
- authStore.setUser(user)
- // return
+ const user = await $api('/api/auth/check', { method: 'GET' })
+ if (user.eppn) {
+ authStore.setUser(user)
+ }
+ else {
+ authStore.unsetUser()
+ }
}
catch {
authStore.unsetUser()
@@ -42,43 +46,39 @@ export function useAuth() {
}
if (isAuthenticated.value) {
- let { next } = to.query
- if (Array.isArray(next)) {
- next = next[0]
+ let { next: nextTo } = to.query
+ if (Array.isArray(nextTo)) {
+ nextTo = nextTo[0]
}
- if (next && !publicRoutes.has(next as string)) {
- router.push(next as string)
- return
+ if (nextTo && !publicRoutes.has(nextTo as string)) {
+ return navigateTo((decodeURIComponent(nextTo)) as string)
}
if (!toPath) {
- router.push(loggedinRedirectRoute)
- return
+ return navigateTo(loggedinRedirectRoute)
}
return
}
- router.push({ path: loginRoute, query: next ? { next } : {} })
+ return navigateTo({ path: loginRoute, query: next ? { next } : {} })
}
- const checkout = () => {
- const route = useRoute()
+ const checkout = async ({ next }: { next?: string } = {}) => {
authStore.unsetUser()
- const next = encodeURIComponent(route.fullPath.replace(/\/$/, ''))
- router.push({ path: loginRoute, query: next ? { next } : {} })
+ return await navigateTo({ path: loginRoute, query: next ? { next } : {} })
}
const logout = async () => {
try {
- await $fetch('/api/auth/logout', { method: 'POST' })
+ await $api('/api/auth/logout', { method: 'GET' })
}
catch {
// ignore errors
}
finally {
- checkout()
+ await checkout()
}
}
diff --git a/src/app/composables/useAuthStore.ts b/src/app/composables/useAuthStore.ts
index 2a6de133..10604d89 100644
--- a/src/app/composables/useAuthStore.ts
+++ b/src/app/composables/useAuthStore.ts
@@ -9,6 +9,7 @@ import { defineStore } from 'pinia'
*/
export interface LoginUser {
id: string
+ eppn: string
userName: string
isSystemAdmin: boolean
}
diff --git a/src/app/composables/useBulk.ts b/src/app/composables/useBulk.ts
new file mode 100644
index 00000000..76f5840e
--- /dev/null
+++ b/src/app/composables/useBulk.ts
@@ -0,0 +1,241 @@
+/**
+ * Composable for bulk user upload operations
+ */
+import { UBadge, UIcon } from '#components'
+
+import type { BadgeProps, TableColumn } from '@nuxt/ui'
+
+const useBulk = () => {
+ const currentStep = ref<'upload' | 'validate' | 'result'>('upload')
+
+ const { t: $t } = useI18n()
+ const items = computed(() => [
+ {
+ title: $t('bulk.step.select_file'),
+ description: $t('bulk.step.select_file_description'),
+ value: 'upload',
+ icon: 'i-lucide-file-up',
+ },
+ {
+ title: $t('bulk.step.validate'),
+ description: $t('bulk.step.validate_description'),
+ value: 'validate',
+ icon: 'i-lucide-shield-check',
+ },
+ {
+ title: $t('bulk.step.complete'),
+ description: $t('bulk.step.complete_description'),
+ value: 'result',
+ icon: 'i-lucide-circle-check-big',
+ },
+ ])
+
+ const route = useRoute()
+ const query = computed(() => normalizeUploadQuery(route.query))
+ const updateQuery = async (newQuery: Partial) => {
+ await navigateTo({
+ query: {
+ ...route.query,
+ ...newQuery,
+ },
+ })
+ }
+ const pageSize = ref(query.value.l)
+ const pageNumber = ref(query.value.p)
+ const sortOrder = ref(query.value.d)
+ const makePageInfo = (result: Ref) => {
+ const start = result.value?.offset ?? 1
+ const total = result.value?.total ?? 0
+ const end = Math.min(start + pageSize.value!, total)
+ return `${start} - ${end} / ${total}`
+ }
+
+ const makeStatusFilters = () => {
+ const filterOptions: { label: string, value: StatusType }[] = [
+ { label: $t('bulk.status.create'), value: 'create' },
+ { label: $t('bulk.status.delete'), value: 'delete' },
+ { label: $t('bulk.status.error'), value: 'error' },
+ { label: $t('bulk.status.skip'), value: 'skip' },
+ { label: $t('bulk.status.update'), value: 'update' },
+ ]
+
+ const filters = computed(() => [
+ {
+ key: 'f',
+ items: filterOptions ?? [],
+ multiple: true,
+ onUpdated: (values: unknown) => {
+ const selectedValues = (values as { value: StatusType }[]).map(v => v.value)
+ updateQuery({ f: selectedValues.map(String), p: 1 })
+ },
+ },
+ ])
+ return filters
+ }
+
+ const STATUS_CONFIG = computed<{ [key in StatusType]: BadgeProps }>(() => ({
+ create: { color: 'success', label: $t('bulk.status.create'), icon: 'i-lucide-plus-circle' },
+ update: { color: 'info', label: $t('bulk.status.update'), icon: 'i-lucide-pencil' },
+ delete: { color: 'error', label: $t('bulk.status.delete'), icon: 'i-lucide-trash-2' },
+ skip: { color: 'neutral', label: $t('bulk.status.skip'), icon: 'i-lucide-minus-circle' },
+ error: { color: 'error', label: $t('bulk.status.error'), icon: 'i-lucide-circle-x' },
+ }))
+
+ const columns = computed[]>(() => [
+ {
+ accessorKey: 'row',
+ header: $t('bulk.column.row'),
+ cell: ({ row }) => {
+ const rowNumber = row.getValue('row')
+ return rowNumber ? `${rowNumber}` : '-'
+ },
+ meta: { class: { td: 'w-20' } },
+ },
+ {
+ accessorKey: 'userName',
+ header: $t('bulk.column.user-name'),
+ cell: ({ row }) => {
+ const name = row.getValue('userName') as string
+ return name || h('span', { class: 'text-muted italic' }, $t('bulk.empty'))
+ },
+ },
+ {
+ accessorKey: 'eppn',
+ header: $t('bulk.column.eppn'),
+ cell: ({ row }) => {
+ const eppn = row.getValue('eppn') as string | string[]
+ const eppnArray = Array.isArray(eppn) ? eppn : [eppn]
+ return eppnArray && eppnArray.length > 0
+ ? h('div', { class: 'flex flex-col gap-1' },
+ eppnArray.map(eppns => h('span', { class: 'font-mono text-sm' }, eppns)))
+ : h('span', { class: 'text-muted italic' }, $t('bulk.empty'))
+ },
+ },
+ {
+ accessorKey: 'groups',
+ header: $t('bulk.column.groups'),
+ cell: ({ row }) => {
+ const groups = row.getValue('groups') as string[]
+ return groups && groups.length > 0
+ ? h('div', { class: 'flex flex-col gap-1' },
+ groups.map(group => h('span', { class: 'font-mono text-sm' }, group)))
+ : h('span', { class: 'text-muted italic' }, $t('bulk.empty'))
+ },
+ },
+ {
+ accessorKey: 'status',
+ header: $t('bulk.column.status'),
+ cell: ({ row }) => {
+ const data = row.original
+ const status = data.status
+ const message = data.code
+
+ const badgeConfig = STATUS_CONFIG.value[status]
+
+ return h('div', { class: 'flex items-center gap-2' }, [
+ h(UBadge, { color: badgeConfig.color, variant: 'subtle', class: 'gap-1' }, () => [
+ h(UIcon, { name: badgeConfig.icon, class: 'size-3' }),
+ badgeConfig.label,
+ ]),
+ message
+ ? h('span', { class: 'text-sm text-muted' }, message)
+ : undefined,
+ ].filter(Boolean))
+ },
+ },
+ ])
+ type IndicatorColor = 'success' | 'info' | 'error' | 'warning'
+ interface Indicator {
+ title: string
+ icon: string
+ number: number
+ color: IndicatorColor
+ key: string
+ }
+
+ const makeIndicators = (summary: ValidationResults | ExecuteResults | undefined): Indicator[] => [
+ {
+ title: $t('bulk.status.create'),
+ icon: 'i-lucide-plus-circle',
+ number: summary?.summary.create ?? 0,
+ color: 'success',
+ key: 'create',
+ },
+ {
+ title: $t('bulk.status.update'),
+ icon: 'i-lucide-pencil',
+ number: summary?.summary.update ?? 0,
+ color: 'info',
+ key: 'update',
+ },
+ {
+ title: $t('bulk.status.delete'),
+ icon: 'i-lucide-trash-2',
+ number: summary?.summary.delete ?? 0,
+ color: 'error',
+ key: 'delete',
+ },
+ {
+ title: $t('bulk.status.skip'),
+ icon: 'i-lucide-minus-circle',
+ number: summary?.summary.skip ?? 0,
+ color: 'warning',
+ key: 'skip',
+ },
+ {
+ title: $t('bulk.status.error'),
+ icon: 'i-lucide-circle-x',
+ number: summary?.summary.error ?? 0,
+ color: 'error',
+ key: 'error',
+ },
+ ]
+ return {
+ query,
+ currentStep,
+ items,
+ pageSize,
+ pageNumber,
+ sortOrder,
+ columns,
+ makePageInfo,
+ makeIndicators,
+ updateQuery,
+ makeStatusFilters,
+ }
+}
+
+const useUserUpload = () => {
+ const selectedFile = ref(undefined)
+ const isProcessing = ref(false)
+
+ return {
+ selectedFile,
+ isProcessing,
+ }
+}
+
+const useValidation = ({ taskId }: { taskId: Ref
+ selectedRepository: Ref }) => {
+ const { query } = useBulk()
+
+ const selectedMissingUsers = useState>(
+ `selection-missing-users:${taskId}`, () => ({}),
+ )
+ const selectedCount = computed(() => {
+ return Object.values(selectedMissingUsers.value).filter(value => value === true).length
+ })
+ const toggleSelection = (userId: string) => {
+ selectedMissingUsers.value[userId] = !selectedMissingUsers.value[userId]
+ }
+
+ return {
+ query,
+ selectedMissingUsers,
+ selectedCount,
+ taskId,
+ toggleSelection,
+ }
+}
+
+export { useBulk, useUserUpload, useValidation }
diff --git a/src/app/composables/useHistory.ts b/src/app/composables/useHistory.ts
new file mode 100644
index 00000000..93c2db8b
--- /dev/null
+++ b/src/app/composables/useHistory.ts
@@ -0,0 +1,556 @@
+import { getLocalTimeZone, parseDate } from '@internationalized/date'
+
+import { UBadge, UButton, UDropdownMenu } from '#components'
+
+import type { Row } from '@tanstack/table-core'
+import type { DropdownMenuItem, TableColumn } from '@nuxt/ui'
+import type { DateRange } from 'reka-ui'
+
+const useHistory = () => {
+ const toast = useToast()
+ const route = useRoute()
+ const { t: $t } = useI18n()
+ const { $api } = useNuxtApp()
+ const { currentUser } = useAuth()
+
+ const query = computed(() => normalizeHistoryQuery(route.query))
+ const updateQuery = async (newQuery: Partial) => {
+ await navigateTo({
+ query: {
+ ...route.query,
+ ...newQuery,
+ },
+ })
+ }
+ const tab = ref(query.value.tab ?? 'download')
+ const sortOrder = computed(() => query.value.d)
+ const pageNumber = ref(query.value.p)
+ const pageSize = ref(query.value.l)
+ const totalItems = ref(0)
+
+ const isFileAvailable = (data: DownloadHistoryData): boolean => {
+ return data.fileExists
+ }
+
+ const uploadColumns = computed[]>(() => [
+ {
+ accessorKey: 'timestamp',
+ header: () => sortableHeader('timestamp'),
+ cell: ({ row }) => {
+ const timestamp = new Date(row.original.timestamp)
+ return datetimeFormatter.format(timestamp)
+ },
+ },
+ {
+ accessorKey: 'operator',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.operator')),
+ cell: ({ row }) => row.original.operator.userName,
+ },
+ { accessorKey: 'users',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.user-count')),
+ cell: ({ row }) => row.original.userCount,
+ },
+ { accessorKey: 'groups',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.group-count')),
+ cell: ({ row }) => row.original.groupCount,
+ },
+ { accessorKey: 'status',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.status')),
+ cell: ({ row }) => {
+ const status = row.original.status
+ switch (status) {
+ case 'S': {
+ return h(UBadge, { color: 'primary', variant: 'solid' }, () => $t('history.success'))
+ }
+ case 'F': {
+ return h(UBadge, { color: 'error', variant: 'solid' }, () => $t('history.failed'))
+ }
+ case 'P': {
+ return h(UBadge, { color: 'warning', variant: 'solid' }, () => $t('history.progress'))
+ }
+ }
+ },
+ },
+ { accessorKey: 'actions',
+ header: '',
+ cell: ({ row }) =>
+ h(
+ 'div',
+ { class: 'text-right' },
+ h(
+ UDropdownMenu,
+ {
+ 'content': { align: 'end' },
+ 'items': getActionItems(row),
+ 'aria-label': 'Actions dropdown',
+ },
+ () =>
+ h(UButton, {
+ 'icon': 'i-lucide-ellipsis-vertical',
+ 'color': 'neutral',
+ 'variant': 'ghost',
+ 'size': 'sm',
+ 'class': 'ml-auto',
+ 'aria-label': 'Actions dropdown',
+ }),
+ ),
+ ),
+ },
+ ])
+
+ const downloadColumns = computed[]>(() => [
+ {
+ id: 'expand',
+ cell: ({ row }) =>
+ h(UButton, {
+ 'color': 'neutral',
+ 'variant': 'ghost',
+ 'icon': 'i-lucide-chevron-down',
+ 'square': true,
+ 'aria-label': 'Expand',
+ 'ui': {
+ leadingIcon: [
+ 'transition-transform',
+ row.getIsExpanded() ? 'duration-200 rotate-180' : '',
+ ],
+ },
+ 'onClick': () => { row.toggleExpanded() },
+ }),
+ },
+ {
+ accessorKey: 'timestamp',
+ header: () => sortableHeader('timestamp'),
+ cell: ({ row }) => {
+ const timestamp = new Date(row.original.timestamp)
+ return datetimeFormatter.format(timestamp)
+ },
+ },
+ {
+ accessorKey: 'operator',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.operator')),
+ cell: ({ row }) => {
+ const name = row.original.operator.userName
+ const childrenCount = row.original.childrenCount
+ if (childrenCount && childrenCount > 0) {
+ return h('span', { class: 'inline-flex items-center gap-1' }, [
+ name,
+ h(UBadge, {
+ color: 'info',
+ variant: 'soft',
+ class: 'ml-1',
+ }, () => $t('history.re-download-count', { count: childrenCount })),
+ ])
+ }
+ return name
+ },
+ },
+ { accessorKey: 'users',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.user-count')),
+ cell: ({ row }) => row.original.userCount,
+ },
+ { accessorKey: 'groups',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.group-count')),
+ cell: ({ row }) => row.original.groupCount,
+ },
+ { accessorKey: 're-download',
+ header: () => h(
+ 'span', { class: 'text-xs text-default font-medium' },
+ $t('history.re-download')),
+ cell: ({ row }) => {
+ const data = row.original
+ return isFileAvailable(data)
+ ? h(UButton, {
+ color: 'primary',
+ variant: 'outline',
+ size: 'sm',
+ onClick: async () => {
+ try {
+ await $api(`/api/history/files/${data.fileId}`, { method: 'GET' })
+ }
+ catch {
+ toast.add({
+ title: $t('history.file_not_available'),
+ color: 'error',
+ icon: 'i-lucide-circle-x',
+ })
+ }
+ },
+ }, () => $t('history.re-download'))
+ : h('span', { class: 'text-xs text-error' }, $t('history.expired'))
+ },
+ },
+ { accessorKey: 'actions',
+ header: '',
+ cell: ({ row }) => {
+ if (!currentUser.value?.isSystemAdmin) {
+ return
+ }
+ return h(
+ 'div',
+ { class: 'text-right' },
+ h(
+ UDropdownMenu,
+ {
+ 'content': { align: 'end' },
+ 'items': getDownloadActionItems(row),
+ 'aria-label': 'Actions dropdown',
+ },
+ () =>
+ h(UButton, {
+ 'icon': 'i-lucide-ellipsis-vertical',
+ 'color': 'neutral',
+ 'variant': 'ghost',
+ 'size': 'sm',
+ 'class': 'ml-auto',
+ 'aria-label': 'Actions dropdown',
+ }),
+ ),
+ )
+ },
+ },
+ ])
+
+ function sortableHeader(key: 'timestamp') {
+ const label = key === 'timestamp'
+ ? (tab.value === 'download'
+ ? $t('history.table.column.download-date')
+ : $t('history.table.column.upload-date'))
+ : ''
+ const iconSet = {
+ asc: 'i-lucide-arrow-down-0-1',
+ desc: 'i-lucide-arrow-up-0-1',
+ none: 'i-lucide-arrow-up-down',
+ } as const
+
+ type SortDirection = keyof typeof iconSet
+ const sortDirection = (sortOrder.value as SortDirection | undefined) ?? 'desc'
+
+ return h(UButton, {
+ color: sortDirection ? 'primary' : 'neutral',
+ variant: 'ghost',
+ size: 'xs',
+ label,
+ icon: sortDirection ? iconSet[sortDirection] : iconSet.none,
+ class: 'font-medium cursor-pointer',
+ onClick() {
+ if (sortDirection === 'asc') updateQuery({ d: 'desc' })
+ else updateQuery({ d: 'asc' })
+ },
+ })
+ }
+
+ function getActionItems(
+ row: Row,
+ ): DropdownMenuItem[] {
+ const items: DropdownMenuItem[] = [
+ {
+ label: row.original.public ? $t('history.private') : $t('history.public'),
+ onSelect: async () => {
+ const data = row.original
+ const id = data.id
+ const currentPublic = data.public
+ const updatedPublic = await togglePublicStatus(id, currentPublic)
+ if (typeof updatedPublic === 'boolean') {
+ data.public = updatedPublic
+ }
+ },
+ },
+ {
+ label: $t('history.show-detail'),
+ onSelect: () => {
+ const data = row.original
+ navigateTo(`/bulk/${data.id}`)
+ },
+ },
+ ]
+ return currentUser.value?.isSystemAdmin ? items : items.slice(1)
+ }
+ function getDownloadActionItems(
+ row: Row,
+ ): DropdownMenuItem[] {
+ return [
+ {
+ label: row.original.public ? $t('history.private') : $t('history.public'),
+ onSelect: async () => {
+ const data = row.original
+ const id = data.id
+ const currentPublic = data.public
+ const updatedPublic = await togglePublicStatus(id, currentPublic)
+ if (typeof updatedPublic === 'boolean') {
+ data.public = updatedPublic
+ }
+ },
+ },
+ ]
+ }
+
+ const togglePublicStatus = async (
+ id: string,
+ currentPublic: boolean,
+ ) => {
+ const body = { public: !currentPublic }
+ try {
+ const result
+ = await $api(`/api/history/${tab.value}/${id}/public-status`,
+ {
+ method: 'PUT',
+ body,
+ })
+ return result.public
+ }
+ catch {
+ toast.add({
+ title: $t('history.toggle_public_status_failed'),
+ color: 'error',
+ icon: 'i-lucide-circle-x',
+ })
+ }
+ }
+
+ const makePageInfo = (searchResult: Ref) => {
+ return computed(() => {
+ const start = searchResult.value?.offset ?? 1
+ const total = searchResult.value?.total ?? 0
+ const end = Math.min(start + pageSize.value!, total)
+
+ return `${start} - ${end} / ${total}`
+ })
+ }
+
+ return {
+ tab,
+ uploadColumns,
+ downloadColumns,
+ totalItems,
+ sortOrder,
+ pageNumber,
+ pageSize,
+ query,
+ makePageInfo,
+ updateQuery,
+ togglePublicStatus,
+ isFileAvailable,
+ }
+}
+
+const useHistoryFilter = () => {
+ const {
+ table: { pageSize: pageSizeConfig },
+ features: { repositories: { 'server-search': serverSearch } },
+ } = useAppConfig()
+ const { t: $t } = useI18n()
+
+ const { query, updateQuery, tab } = useHistory()
+ const specifiedIds = ref(query.value.i)
+ const specifiedRepos = ref(query.value.r)
+ const specifiedGroups = ref(query.value.g)
+ const specifiedUsers = ref(query.value.u)
+ const specifiedOperators = ref(query.value.o)
+ const startDate = ref(query.value.s)
+ const endDate = ref(query.value.e)
+ const isFiltered = computed(() =>
+ !!(query.value.r || query.value.g || query.value.u || query.value.o
+ || query.value.s || query.value.e),
+ )
+
+ type FilterArguments = {
+ [key in 'repositorySelect' | 'groupSelect' | 'userSelect' | 'operatorSelect']: {
+ ref: Ref
+ url: string
+ }
+ }
+ const makeHistoryFilters = (
+ data: Ref,
+ { repositorySelect, groupSelect, userSelect, operatorSelect }: FilterArguments,
+ ) => {
+ const {
+ items: repositoryItems,
+ searchTerm: repoSearchTerm,
+ status: repoSearchStatus,
+ onOpen: onRepoOpen,
+ setupInfiniteScroll: setupRepoScroll,
+ } = useSelectMenuInfiniteScroll({
+ url: repositorySelect.url,
+ limit: pageSizeConfig.repositories[0],
+ server: serverSearch,
+ transform: repository => ({
+ label: repository.serviceName,
+ value: repository.id,
+ }),
+ })
+ setupRepoScroll(repositorySelect.ref)
+
+ const {
+ items: groupItems,
+ searchTerm: groupSearchTerm,
+ status: groupSearchStatus,
+ onOpen: onGroupOpen,
+ setupInfiniteScroll: setupGroupScroll,
+ } = useSelectMenuInfiniteScroll({
+ url: groupSelect.url,
+ limit: pageSizeConfig.groups[0],
+ transform: group => ({
+ label: group.displayName,
+ value: group.id,
+ }),
+ })
+ setupGroupScroll(groupSelect.ref)
+
+ const {
+ items: userItems,
+ searchTerm: userSearchTerm,
+ status: userSearchStatus,
+ onOpen: onUserOpen,
+ setupInfiniteScroll: setupUserScroll,
+ } = useSelectMenuInfiniteScroll({
+ url: userSelect.url,
+ limit: pageSizeConfig.users[0],
+ transform: user => ({
+ label: user.userName,
+ value: user.id,
+ }),
+ })
+ setupUserScroll(userSelect.ref)
+
+ const {
+ items: operatorItems,
+ searchTerm: operatorSearchTerm,
+ status: operatorSearchStatus,
+ onOpen: onOperatorOpen,
+ setupInfiniteScroll: setupOperatorScroll,
+ } = useSelectMenuInfiniteScroll>({
+ url: operatorSelect.url,
+ limit: pageSizeConfig.history[0],
+ transform: operator => ({
+ label: operator.userName,
+ value: operator.id,
+ }),
+ })
+ setupOperatorScroll(operatorSelect.ref)
+
+ const options = computed(() => (
+ Object.fromEntries(data.value?.map(option => [option.key, option]) ?? [],
+ ) as Record
+ ))
+
+ const repositoryFilter = computed(() => ({
+ key: 'repositorySelect' as const,
+ placeholder: $t('repositories.title'),
+ icon: 'i-lucide-folder',
+ items: repositoryItems.value,
+ multiple: options.value.r?.multiple ?? false,
+ searchTerm: repoSearchTerm,
+ searchInput: true,
+ loading: repoSearchStatus.value === 'pending',
+ onOpen: onRepoOpen,
+ onUpdated: (values: unknown) => {
+ updateQuery({ r: (values as { value: string }[]).map(v => v.value), p: 1 })
+ },
+ }))
+ const groupFilter = computed(() => ({
+ key: 'groupSelect' as const,
+ placeholder: $t('groups.title'),
+ icon: 'i-lucide-users',
+ items: groupItems.value,
+ multiple: options.value.g?.multiple ?? false,
+ searchTerm: groupSearchTerm,
+ searchInput: true,
+ loading: groupSearchStatus.value === 'pending',
+ onOpen: onGroupOpen,
+ onUpdated: (values: unknown) => {
+ updateQuery({ g: (values as { value: string }[]).map(v => v.value), p: 1 })
+ },
+ }))
+ const userFilter = computed(() => ({
+ key: 'userSelect' as const,
+ placeholder: $t('users.title'),
+ icon: 'i-lucide-user',
+ items: userItems.value,
+ multiple: options.value.u?.multiple ?? false,
+ searchTerm: userSearchTerm,
+ searchInput: true,
+ loading: userSearchStatus.value === 'pending',
+ onOpen: onUserOpen,
+ onUpdated: (values: unknown) => {
+ updateQuery({ u: (values as { value: string }[]).map(v => v.value), p: 1 })
+ },
+ }))
+ const operatorFilter = computed(() => ({
+ key: 'operatorSelect' as const,
+ placeholder: $t('history.operator'),
+ icon: 'i-lucide-user-check',
+ items: operatorItems.value,
+ multiple: options.value.o?.multiple ?? false,
+ searchTerm: operatorSearchTerm,
+ searchInput: true,
+ loading: operatorSearchStatus.value === 'pending',
+ onOpen: onOperatorOpen,
+ onUpdated: (values: unknown) => {
+ updateQuery({ o: (values as { value: string }[]).map(v => v.value), p: 1 })
+ },
+ }))
+
+ return {
+ repositoryFilter,
+ groupFilter,
+ userFilter,
+ operatorFilter,
+ }
+ }
+ const dateRange = shallowRef({
+ start: startDate.value ? parseDate(startDate.value) : undefined,
+ end: endDate.value ? parseDate(endDate.value) : undefined,
+ })
+
+ const formattedDateRange = computed(() => {
+ if (!dateRange.value.start) return $t('history.date')
+ const from = dateFormatter.format(dateRange.value.start.toDate(getLocalTimeZone()))
+ const to = dateRange.value.end
+ ? dateFormatter.format(dateRange.value.end.toDate(getLocalTimeZone()))
+ : undefined
+
+ return to ? `${from} - ${to}` : from
+ })
+
+ const targetLabel = computed(() =>
+ tab.value === 'download' ? $t('history.target', 1) : $t('history.target', 2),
+ )
+
+ return {
+ query,
+ tab,
+ isFiltered,
+ updateQuery,
+ criteria: {
+ specifiedIds,
+ specifiedRepos,
+ specifiedGroups,
+ specifiedUsers,
+ specifiedOperators,
+ startDate,
+ endDate,
+ },
+ dateFilter: {
+ dateRange,
+ formattedDateRange,
+ },
+ targetLabel,
+ makeHistoryFilters,
+ }
+}
+
+export { useHistory, useHistoryFilter }
diff --git a/src/app/composables/useMenu.ts b/src/app/composables/useMenu.ts
index 2cec8f1e..c34b2e00 100644
--- a/src/app/composables/useMenu.ts
+++ b/src/app/composables/useMenu.ts
@@ -6,12 +6,13 @@
* Composable to manage the application menu items
*/
-import type { FooterColumn, NavigationMenuItem } from '@nuxt/ui'
+import type { ButtonProps, FooterColumn, NavigationMenuItem } from '@nuxt/ui'
export function useMenu() {
const route = useRoute()
const { t: $t } = useI18n()
- const { currentUser } = useAuth()
+ const { header: { userManualURL } } = useAppConfig()
+ const { currentUser, logout } = useAuth()
const items = computed(() => ([
{
@@ -44,8 +45,8 @@ export function useMenu() {
},
{
- label: $t('cache-groups.title'),
- to: '/cache-groups',
+ label: $t('group-caches.title'),
+ to: '/group-caches',
icon: 'i-lucide-database',
requiredSystemAdmin: true,
},
@@ -75,5 +76,32 @@ export function useMenu() {
})),
})))
- return { navigation, footer }
+ const submenu = computed(() => (
+ [
+ {
+ id: 'profile',
+ label: $t('submenu.profile'),
+ to: `/users/${currentUser.value?.id}`,
+ icon: 'i-lucide-user',
+ color: 'neutral',
+ },
+ userManualURL && {
+ id: 'manual',
+ label: $t('submenu.manual'),
+ target: '_blank',
+ to: userManualURL,
+ icon: 'i-lucide-book-open',
+ color: 'neutral',
+ },
+ {
+ id: 'logout',
+ label: $t('submenu.logout'),
+ icon: 'i-lucide-log-out',
+ color: 'error',
+ onClick: logout,
+ },
+ ] as (ButtonProps & { id: string })[]
+ ).filter(Boolean))
+
+ return { navigation, footer, submenu }
}
diff --git a/src/app/composables/useSticky.ts b/src/app/composables/useSticky.ts
new file mode 100644
index 00000000..0efc72ba
--- /dev/null
+++ b/src/app/composables/useSticky.ts
@@ -0,0 +1,65 @@
+/**
+ * Composable for managing sticky elements based on the position of a base element.
+ */
+
+export function useSticky(
+ targetReference: Ref,
+ options: {
+ /** Base element selector for calculating sticky offset */
+ baseElementSelector: string
+ /**
+ * Space in rem units between the sticky element and the base element
+ * @default 1
+ */
+ spaceRem?: number
+ /**
+ * Fallback position (in pixels) if the base element is not found
+ * @default 0
+ */
+ fallbackPosition?: number
+ },
+) {
+ const isStuck = ref(false)
+ let observer: IntersectionObserver | undefined
+
+ const initStickyObserver = () => {
+ if (observer) observer.disconnect()
+
+ const style = getComputedStyle(document.documentElement)
+
+ const baseElement = document.querySelector(options.baseElementSelector)
+ const basePositon = baseElement
+ ? baseElement.getBoundingClientRect().height
+ : options.fallbackPosition || 0
+
+ const remPx = Number.parseFloat(style.fontSize) || 16
+ const buffer = 1
+ const offset = basePositon + (options.spaceRem || 1) * remPx + buffer
+
+ observer = new IntersectionObserver(
+ ([entry]) => {
+ isStuck.value = entry ? entry.intersectionRatio < 1 : false
+ },
+ {
+ threshold: [1],
+ rootMargin: `-${offset}px 0px 0px 0px`,
+ },
+ )
+
+ if (targetReference.value) {
+ observer.observe(targetReference.value as HTMLElement)
+ }
+ }
+
+ onMounted(() => {
+ initStickyObserver()
+ window.addEventListener('resize', initStickyObserver)
+ })
+
+ onUnmounted(() => {
+ observer?.disconnect()
+ window.removeEventListener('resize', initStickyObserver)
+ })
+
+ return { isStuck }
+}
diff --git a/src/app/composables/users.ts b/src/app/composables/users.ts
index 73fdc8f0..983977ab 100644
--- a/src/app/composables/users.ts
+++ b/src/app/composables/users.ts
@@ -3,12 +3,13 @@
*/
import { DateFormatter, getLocalTimeZone, parseDate } from '@internationalized/date'
+import { camelCase } from 'scule'
import { UButton, UCheckbox, UDropdownMenu, UIcon, ULink, UTooltip } from '#components'
-import type { CalendarDate } from '@internationalized/date'
-import type { Row } from '@tanstack/table-core'
+import type { Row, Table } from '@tanstack/table-core'
import type { ButtonProps, DropdownMenuItem, TableColumn, TableRow } from '@nuxt/ui'
+import type { DateRange } from 'reka-ui'
const useUsersTable = () => {
const route = useRoute()
@@ -17,6 +18,12 @@ const useUsersTable = () => {
const { t: $t } = useI18n()
const { copy } = useClipboard()
+ const {
+ table: { pageSize: pageSizeConfig },
+ features: { users: { 'sort-columns': sortColumns, 'file-upload': fileUpload },
+ repositories: { 'server-search': serverSearch } },
+ } = useAppConfig()
+
/** Reactive query object */
const query = computed(() => normalizeUsersQuery(route.query))
/** Update query parameters and push to router */
@@ -32,8 +39,8 @@ const useUsersTable = () => {
const searchTerm = ref(query.value.q)
const specifiedIds = ref(query.value.i)
const specifiedRepos = ref(query.value.r)
- const specifiedGroups = ref(query.value.g)
- const specifiedRoles = ref(query.value.a)
+ const specifiedGroups = computed(() => query.value.g)
+ const specifiedRoles = computed(() => query.value.a)
const startDate = ref(query.value.s)
const endDate = ref(query.value.e)
const sortKey = computed(() => query.value.k)
@@ -46,19 +53,59 @@ const useUsersTable = () => {
return JSON.stringify(filters)
})
- const selectedMap = useState>(
+ const selectedMap = useState>(
`selection-users:${searchIdentityKey.value}`, () => ({}),
)
/** Number of selected users */
const selectedCount = computed(() => {
- return Object.values(selectedMap.value).filter(value => value === true).length
+ return Object.values(selectedMap.value).filter(value => value !== undefined).length
})
const toggleSelection = (event: Event | undefined, row: Row) => {
- selectedMap.value[row.id] = !selectedMap.value[row.id]
- row.toggleSelected(selectedMap.value[row.id])
+ selectedMap.value[row.original.id]
+ = selectedMap.value[row.original.id] ? undefined : row.original.userName
+ }
+ const toggleAllPageRows = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ const allSelected = pageRows.every(row => selectedMap.value[row.original.id] !== undefined)
+
+ if (allSelected) {
+ for (const row of pageRows) {
+ selectedMap.value[row.original.id] = undefined
+ }
+ }
+ else {
+ for (const row of pageRows) {
+ selectedMap.value[row.original.id] = row.original.userName
+ }
+ }
+ }
+ const isAllPageRowsSelected = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ return pageRows.length > 0 && pageRows.every(
+ row => selectedMap.value[row.original.id] !== undefined,
+ )
+ }
+ const isSomePageRowsSelected = (table: Table) => {
+ const pageRows = table.getRowModel().rows
+ const selectedRows = pageRows.filter(row => selectedMap.value[row.original.id] !== undefined)
+ return selectedRows.length > 0 && selectedRows.length < pageRows.length
}
+ const getSelected = (): { id: string, userName: string }[] => {
+ return Object.entries(selectedMap.value)
+ .filter(([_, userName]) => userName !== undefined)
+ .map(([id, userName]) => ({ id, userName: userName! }))
+ }
+ const clearSelection = () => {
+ selectedMap.value = {}
+ }
+
+ const modals = reactive({
+ add: false,
+ remove: false,
+ })
+
/** Column names with translations */
const columnNames = computed>(() => ({
id: '#',
@@ -70,25 +117,35 @@ const useUsersTable = () => {
}))
/** Returns action buttons for a user entry */
- const creationButtons = computed(() => [
- {
- icon: 'i-lucide-user-plus',
- label: $t('button.create-new'),
- to: '/users/new',
- color: 'primary',
- variant: 'solid',
- },
- {
- icon: 'i-lucide-file-up',
- label: $t('button.upload-users'),
- to: '/upload',
- color: 'primary',
- variant: 'solid',
- },
- ])
+ const creationButtons = computed<[ButtonProps, ...ButtonProps[]]>(() => fileUpload
+ ? [
+ {
+ icon: 'i-lucide-user-plus',
+ label: $t('button.create-new'),
+ to: '/users/new',
+ color: 'primary',
+ variant: 'solid',
+ },
+ {
+ icon: 'i-lucide-file-up',
+ label: $t('button.upload'),
+ to: '/bulk',
+ color: 'primary',
+ variant: 'solid',
+ },
+ ]
+ : [
+ {
+ icon: 'i-lucide-user-plus',
+ label: $t('button.create-new'),
+ to: '/users/new',
+ color: 'primary',
+ variant: 'solid',
+ },
+ ])
/** Actions to display when the list is empty */
- const emptyActions = computed(() => [
+ const emptyActions = computed<[ButtonProps, ...ButtonProps[]]>(() => [
{
icon: 'i-lucide-refresh-cw',
label: $t('button.reload'),
@@ -99,38 +156,49 @@ const useUsersTable = () => {
])
/** Actions for selected users */
- const selectedUsersActions = computed(() => [
+ const selectedUsersActions = computed<[DropdownMenuItem, ...DropdownMenuItem[]]>(() => [
+ {
+ type: 'label' as const,
+ label: $t('users.all-users-actions'),
+ },
{
icon: 'i-lucide-download',
- label: $t('users.button.selected-users-export'),
- onSelect() {
- // TODO: Export selected users
- },
+ label: $t('users.button.all-users-download'),
+ onSelect() {}, // Placeholder for download action
},
{
type: 'separator' as const,
},
+ {
+ type: 'label' as const,
+ label: $t('users.selected-users-actions'),
+ },
+ {
+ icon: 'i-lucide-download',
+ label: $t('users.button.selected-users-download'),
+ onSelect() {}, // Placeholder for download action
+ disabled: selectedCount.value === 0,
+ },
{
icon: 'i-lucide-user-plus',
label: $t('users.button.selected-users-add-to-group'),
color: 'neutral',
- onSelect() {
- // TODO: Open add users modal
- },
+ onSelect: () => modals.add = true,
+ disabled: selectedCount.value === 0,
},
{
icon: 'i-lucide-user-minus',
label: $t('users.button.selected-users-remove-from-group'),
color: 'error',
- onSelect() {
- // TODO: Open remove users modal
- },
+ onSelect: () => modals.remove = true,
+ disabled: selectedCount.value === 0,
},
])
- type badgableRoles = 'systemAdmin' | 'repositoryAdmin' | 'communityAdmin' | 'contributor'
- const isBadge = (role: UserRole | undefined): role is badgableRoles => {
- const roles = new Set(['systemAdmin', 'repositoryAdmin', 'communityAdmin', 'contributor'])
+ const badgableRoles = ['systemAdmin', 'repositoryAdmin', 'communityAdmin', 'contributor'] as const
+ type BadgableRoles = (typeof badgableRoles)[number]
+ const hasBadge = (role: UserRole | undefined): role is BadgableRoles => {
+ const roles = new Set(badgableRoles)
return role ? roles.has(role) : false
}
@@ -140,15 +208,15 @@ const useUsersTable = () => {
id: 'select',
header: ({ table }) =>
h(UCheckbox, {
- 'modelValue': table.getIsSomePageRowsSelected()
+ 'modelValue': isSomePageRowsSelected(table)
? 'indeterminate'
- : table.getIsAllPageRowsSelected(),
- 'onUpdate:modelValue': value => table.toggleAllPageRowsSelected(!!value),
+ : isAllPageRowsSelected(table),
+ 'onUpdate:modelValue': () => toggleAllPageRows(table),
'aria-label': 'Select all',
}),
cell: ({ row }) =>
h(UCheckbox, {
- 'modelValue': row.getIsSelected(),
+ 'modelValue': selectedMap.value[row.original.id] !== undefined,
'onUpdate:modelValue': () => toggleSelection(undefined, row),
'aria-label': 'Select row',
}),
@@ -156,15 +224,19 @@ const useUsersTable = () => {
},
{
accessorKey: 'id',
- header: () => sortableHeader('id'),
+ header: () => sortColumns
+ ? sortableHeader('id')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.id),
},
{
accessorKey: 'userName',
- header: () => sortableHeader('userName'),
+ header: () => sortColumns
+ ? sortableHeader('userName')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.userName),
cell: ({ row }) => {
const name = row.original.userName
- const role = row.original.role
- const labelMap: Record = {
+ const role = camelCase(row.original.role!)
+ const labelMap: Record = {
systemAdmin: {
label: $t('users.roles.system-admin'),
icon: 'i-lucide-shield-check',
@@ -190,20 +262,21 @@ const useUsersTable = () => {
return h(ULink,
{
to: (`/users/${row.original.id}`),
- class: 'font-bold inline-flex items-center group text-neutral',
+ class: 'font-bold inline-flex items-center group text-neutral space-x-2',
},
() => [
+ hasBadge(role)
+ ? h(UTooltip, {
+ text: labelMap[role].label,
+ arrow: true,
+ }, () => h(
+ UIcon, {
+ name: labelMap[role].icon,
+ class: ['size-4.5', 'shrink-0', `text-${labelMap[role].color}`],
+ },
+ ))
+ : h('span', { class: 'size-4.5' }),
h('span', { class: 'group-hover:underline' }, name),
- isBadge(role) && h(UTooltip, {
- text: labelMap[role].label,
- class: 'ml-2',
- arrow: true,
- }, () => h(
- UIcon, {
- name: labelMap[role].icon,
- class: ['size-4.5', 'shrink-0', `text-${labelMap[role].color}`],
- },
- )),
].filter(Boolean),
)
},
@@ -211,17 +284,27 @@ const useUsersTable = () => {
},
{
accessorKey: 'emails',
- header: () => sortableHeader('emails'),
+ header: () => sortColumns
+ ? sortableHeader('emails')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.emails),
cell: ({ row }) => row.original.emails?.[0] ?? '',
},
{
accessorKey: 'eppns',
- header: () => sortableHeader('eppns'),
+ header: () => sortColumns
+ ? sortableHeader('eppns')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.eppns),
cell: ({ row }) => row.original.eppns?.[0] ?? '',
},
{
accessorKey: 'lastModified',
- header: () => sortableHeader('lastModified'),
+ header: () => sortColumns
+ ? sortableHeader('lastModified')
+ : h('span', { class: 'text-xs text-default font-medium' }, columnNames.value.lastModified),
+ cell: ({ row }) =>
+ row.original.lastModified
+ ? datetimeFormatter.format(new Date(row.original.lastModified))
+ : undefined,
},
{
id: 'actions',
@@ -231,7 +314,6 @@ const useUsersTable = () => {
'div',
{ class: 'text-right' },
h(
- // @ts-expect-error: props type mismatch
UDropdownMenu,
{
'content': { align: 'end' },
@@ -289,8 +371,8 @@ const useUsersTable = () => {
copy(row.original.id)
toast.add({
- title: $t('toast.success-title'),
- description: $t('user.actions.copy-id-success'),
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-user-id.description'),
color: 'success',
icon: 'i-lucide-circle-check',
})
@@ -303,7 +385,8 @@ const useUsersTable = () => {
copy(row.original.eppns?.[0] || '')
toast.add({
- title: $t('user.actions.copy-eppn-success'),
+ title: $t('toast.success.title'),
+ description: $t('toast.success.copy-user-eppn.description'),
color: 'success',
icon: 'i-lucide-circle-check',
})
@@ -331,55 +414,94 @@ const useUsersTable = () => {
generalUser: $t('users.roles.general-user'),
}))
- const makeAttributeFilters = (data: Ref) => {
+ const makeAttributeFilters = (
+ data: Ref,
+ {
+ repositorySelect, groupSelect,
+ }: { [key in 'repositorySelect' | 'groupSelect']: { ref: Ref, url: string } },
+ ) => {
+ const {
+ items: repositoryItems,
+ searchTerm: repoSearchTerm,
+ status: repoSearchStatus,
+ onOpen: onRepoOpen,
+ setupInfiniteScroll: setupRepoScroll,
+ } = useSelectMenuInfiniteScroll({
+ url: repositorySelect.url,
+ limit: pageSizeConfig.repositories[0],
+ server: serverSearch,
+ transform: repository => ({
+ label: repository.serviceName,
+ value: repository.id,
+ }),
+ })
+ setupRepoScroll(repositorySelect.ref)
+
+ const {
+ items: groupItems,
+ searchTerm: groupSearchTerm,
+ status: groupSearchStatus,
+ onOpen: onGroupOpen,
+ setupInfiniteScroll: setupGroupScroll,
+ } = useSelectMenuInfiniteScroll({
+ url: groupSelect.url,
+ limit: pageSizeConfig.groups[0],
+ transform: group => ({
+ label: group.displayName,
+ value: group.id,
+ }),
+ })
+ setupGroupScroll(groupSelect.ref)
+
const options = computed(() => (
Object.fromEntries(data.value?.map(option => [option.key, option]) ?? [],
) as Record
))
- const filters = computed(() => [
- {
- key: 'r',
- placeholder: $t('repositories.title'),
- icon: 'i-lucide-folder',
- items: options.value.r.items ?? [],
- multiple: options.value.r.multiple ?? false,
- searchInput: true,
- onUpdated: (values: unknown) => {
- updateQuery({ r: (values as { value: string }[]).map(v => v.value), p: 1 })
- },
+ const repositoryFilter = computed(() => ({
+ key: 'repositorySelect' as const,
+ placeholder: $t('repositories.title'),
+ icon: 'i-lucide-folder',
+ items: repositoryItems.value,
+ multiple: options.value.r.multiple ?? false,
+ searchTerm: repoSearchTerm,
+ loading: repoSearchStatus.value === 'pending',
+ onOpen: onRepoOpen,
+ onUpdated: (values: unknown) => {
+ updateQuery({ r: (values as { value: string }[]).map(v => v.value), p: 1 })
},
- {
- key: 'a',
- placeholder: $t('user.roles-title'),
- icon: 'i-lucide-shield-check',
- items: options.value.a.items?.map(item => ({
- value: item.value,
- label: UserRoleNames.value[item.label as UserRole],
- })) ?? [],
- multiple: options.value.a.multiple ?? false,
- searchInput: false,
- onUpdated: (values: unknown) => {
- updateQuery({ a: (values as { value: UserRoleValue }[]).map(v => v.value), p: 1 })
- },
+ }))
+ const roleFilter = computed(() => ({
+ key: 'roleSelect' as const,
+ placeholder: $t('user.roles-title'),
+ icon: 'i-lucide-shield-check',
+ items: options.value.a.items?.map(item => ({
+ value: item.value,
+ label: UserRoleNames.value[item.label as UserRole],
+ })) ?? [],
+ multiple: options.value.a.multiple ?? false,
+ onUpdated: (values: unknown) => {
+ updateQuery({ a: (values as { value: UserRoleValue }[]).map(v => v.value), p: 1 })
},
- {
- key: 'g',
- placeholder: $t('groups.title'),
- icon: 'i-lucide-users',
- items: options.value.g.items ?? [],
- multiple: options.value.g.multiple ?? false,
- searchInput: true,
- onUpdated: (values: unknown) => {
- updateQuery({ g: (values as { value: string }[]).map(v => v.value), p: 1 })
- },
+ }))
+ const groupFilter = computed(() => ({
+ key: 'groupSelect' as const,
+ placeholder: $t('groups.title'),
+ icon: 'i-lucide-users',
+ items: groupItems.value,
+ multiple: options.value.g.multiple ?? false,
+ searchTerm: groupSearchTerm,
+ loading: groupSearchStatus.value === 'pending',
+ onOpen: onGroupOpen,
+ onUpdated: (values: unknown) => {
+ updateQuery({ g: (values as { value: string }[]).map(v => v.value), p: 1 })
},
- ])
+ }))
- return filters
+ return { repositoryFilter, roleFilter, groupFilter }
}
- const dateRange = shallowRef<{ start: CalendarDate | undefined, end: CalendarDate | undefined }>({
+ const dateRange = shallowRef({
start: startDate.value ? parseDate(startDate.value) : undefined,
end: endDate.value ? parseDate(endDate.value) : undefined,
})
@@ -410,37 +532,83 @@ const useUsersTable = () => {
})
}
+ const isRoleFilterActive = computed(() => {
+ return specifiedRoles.value && specifiedRoles.value.length > 0
+ })
+
+ const isGroupFilterActive = computed(() => {
+ return specifiedGroups.value && specifiedGroups.value.length > 0
+ })
+
return {
+ /** Computed reference for the current query */
query,
+ /** Update query parameters and push to router */
updateQuery,
+ /** Criteria for filtering and sorting users */
criteria: {
+ /** Reactive object for the search term */
searchTerm,
+ /** Reactive object for the specified IDs */
specifiedIds,
+ /** Reactive object for the specified repositories */
specifiedRepos,
+ /** Reactive object for the specified groups */
specifiedGroups,
+ /** Reactive object for the specified roles */
specifiedRoles,
+ /** Reactive object for the start date */
startDate,
+ /** Reactive object for the end date */
endDate,
+ /** Computed reference for the sort key */
sortKey,
+ /** Computed reference for the sort order */
sortOrder,
+ /** Reactive object for the current page number */
pageNumber,
+ /** Reactive object for the number of items per page */
pageSize,
},
+ /** Button properties for creating a new user */
creationButtons,
+ /** Button properties for actions when the list is empty */
emptyActions,
+ /** Count of selected users */
selectedCount,
+ /** Toggle selection of a user */
toggleSelection,
+ /** Get selected users as an array of objects with id and userName */
+ getSelected,
+ /** Clear all selections */
+ clearSelection,
+ /** Dropdown items of actions for the selected users */
selectedUsersActions,
+ /** Column definitions for the table with translations */
columns,
+ /** Column names for the table with translations */
columnNames,
+ /** Reactive object for the visibility of columns */
columnVisibility,
+ /** Mapping of user role names with translations */
UserRoleNames,
+ /** Make attribute filters for table columns */
makeAttributeFilters,
+ /** Date range for filtering */
dateFilter: {
+ /** Reactive object for the date range */
dateRange,
+ /** Computed reference for the formatted date range */
formattedDateRange,
},
+ /** Make indicator for the page information */
makePageInfo,
+ /** Indicator for whether the group filter is active */
+ isGroupFilterActive,
+ /** Indicator for whether the role filter is active */
+ isRoleFilterActive,
+ /** Reactive object for the state of modals */
+ modals,
}
}
diff --git a/src/app/i18n/locales/en.json b/src/app/i18n/locales/en.json
index 7dcef2ab..a7ae2fbd 100644
--- a/src/app/i18n/locales/en.json
+++ b/src/app/i18n/locales/en.json
@@ -1,34 +1,134 @@
{
+ "bulk": {
+ "about": "About bulk operations",
+ "about-description": "Users included in the file are newly registered or updated.",
+ "about-description2": "Existing users are matched by id and updated if they match.",
+ "about-description3": "You can choose to delete users who are not included in the file.",
+ "about-description4": "Supported formats: TSV, CSV, Excel.",
+ "column": {
+ "eppn": "ePPN",
+ "groups": "Group ID",
+ "row": "row",
+ "status": "status",
+ "user-name": "name"
+ },
+ "completed-at": "End date and time",
+ "description": "You can perform bulk operations on users belonging to a repository by uploading files.",
+ "deselect_all": "Release all",
+ "empty": "empty",
+ "excute": {
+ },
+ "execute": {
+ "failed": "User update failed.",
+ "timeout": "Bulk update process timed out."
+ },
+ "file-format-error": "The file format is not supported. \nChoose TSV, CSV, or Excel file.",
+ "file-required": "Please select file.",
+ "import": {
+ },
+ "import-results": "Batch operation results",
+ "missing-user": {
+ "confirm": "Confirm deletion",
+ "confirm_desc": "The selected ${count} users will be deleted. \nThis operation cannot be undone.",
+ "select": "Please select the user to delete."
+ },
+ "missing_user": "User not included in file",
+ "no-results": "Data not found.",
+ "operator": "Execution user",
+ "repository-required": "Please select a repository.",
+ "select-repository": "Please select a repository.",
+ "select_all": "Select all",
+ "start-at": "Start date and time",
+ "status": {
+ "create": "create",
+ "delete": "delete",
+ "error": "error",
+ "skip": "No updates",
+ "update": "update"
+ },
+ "step": {
+ "complete": "completion",
+ "complete_description": "Upload result",
+ "select_file": "File selection",
+ "select_file_description": "CSV,TSV or Excel file",
+ "validate": "data validation",
+ "validate_description": "Confirm changes"
+ },
+ "title": "Bulk user operations",
+ "upload": {
+ "execute": "Execute upload"
+ },
+ "upload-field": "Select or drag files",
+ "upload-file": "upload file",
+ "upload-file-info": "Batch operation results",
+ "validation": {
+ "error": "Invalid data detected.",
+ "error-detail": "Please correct the file and upload it again.",
+ "failed": "File validation failed.",
+ "fetch_failed": "Failed to obtain verification results.",
+ "fix_error": "Please fix the error.",
+ "results": "data preview",
+ "timeout": "File validation timed out."
+ }
+ },
"button": {
"add": "Add",
+ "back": "return",
"cancel": "Cancel",
"create-new": "Create new",
"delete": "Delete",
+ "next": "to the next",
"reload": "Reload",
+ "remove": "Remove",
"save": "Save",
"update": "Update",
- "upload-users": "Upload"
+ "upload": "Upload"
},
"cache-groups": {
- "description": "You can manage the cache status of group information used by WEKO3.",
- "title": "Caching Groups"
- },
- "error": {
- "conflict": {
- "description": "There was a conflict in the input content.",
- "title": "Conflict error"
+ "button": {
},
- "server": {
- "description": "An unexpected error occurred on the server.",
- "title": "Internal Server Error"
+ "confirm-update-selected-repositories": "Would you like to update the following {count} repositories?",
+ "count": "{current} / {total} items",
+ "filter-placeholder": "Cache status",
+ "select": {
},
- "unexpected": {
- "description": "An unexpected error has occurred.",
- "title": "Error"
+ "table": {
+ "column": {
+ "repository-status": "Update status"
+ }
},
- "validation": {
- "description": "The input content is invalid. Please check the message in the input field.",
- "title": "Validation Error"
+ "update-completed": "Update completed ({count} items)",
+ "update-error": "Cache update processing is in progress."
+ },
+ "common": {
+ "loading": "Loading..."
+ },
+ "error-page": {
+ "failed": {
+ "load-more": "Failed to retrieve download history again"
+ },
+ "forbidden": {
+ "bulk-edit": "You do not have permission to work with users of this repository.",
+ "bulk-result": "You do not have permission to view upload history.",
+ "group-access": "You do not have permission to access this group.",
+ "group-caches": "You do not have permission to manage group caches.",
+ "group-create": "You do not have permission to create groups in the selected repository.",
+ "group-delete": "You do not have permission to delete this group.",
+ "group-edit": "You do not have permission to change information for this group.",
+ "group-member-edit": "You do not have permission to change the members of this group.",
+ "repository-access": "You do not have permission to access this repository.",
+ "repository-create": "You do not have permission to create a repository.",
+ "repository-edit": "You do not have permission to modify information in this repository.",
+ "user-access": "You do not have permission to access this user.",
+ "user-create": "You do not have permission to make users belong to the selected repository or group.",
+ "user-edit": "You do not have permission to change this user's information."
+ },
+ "not-found": {
+ "bulk-result": "No matching upload history was found.",
+ "bulk-validation": "File verification results not found",
+ "group": "No such group found.",
+ "repository": "No such repository found.",
+ "user": "No such user found."
}
},
"footer": {
@@ -43,9 +143,9 @@
"display-name": "Display Name",
"display-name-description": "Display name of the group. It is not linked to the group name in the actual repository.",
"error": {
- "not-found": "Group not found."
},
"id": "Group ID",
+ "id-description": "Group identifier. The string limit changes depending on the selected repository.",
"member-list-visibility": {
"hidden": "Hidden",
"private": "Visible only to members",
@@ -67,30 +167,58 @@
},
"repository": "@:repositories.title",
"repository-description": "Select repository to create group",
+ "type-role": "Role type Group",
"validation": {
"displayName": {
"required": "Display name is required field."
},
+ "groupId": {
+ "invalid-format": "Group IDs must consist of half-width alphanumeric characters and symbols (.-_).",
+ "max-length": "Group ID must be less than or equal to {max} characters.",
+ "required": "Group ID is a required field."
+ },
"memberListVisibility": {
"invalid": "Select the member's visibility status from the dropdown list."
},
"repository": {
"id": {
- "required": "Repository selection is required"
+ "required": "Repository selection is required."
}
}
}
},
+ "group-caches": {
+ "button": {
+ "update-all": "Update all repositories",
+ "update-all-repositories": "Update all cache",
+ "update-selected-repositories": "Update cache"
+ },
+ "description": "You can manage the cache status of group information used by WEKO3.",
+ "search-placeholder": "search...",
+ "status": {
+ "cached": "Cached",
+ "no-cached": "Not cached"
+ },
+ "table": {
+ "column": {
+ "repository-name": "Repository name",
+ "repository-updated-at": "Cache update date and time",
+ "repository-url": "Repository URL"
+ },
+ "no-cache": ""
+ },
+ "title": "Caching Groups",
+ "updating": "Updating..."
+ },
"groups": {
"actions": {
- "copy-id": "Copy ID to clipboard",
- "copy-id-success": "The group ID has been copied to the clipboard."
+ "copy-id": "Copy ID to clipboard"
},
"button": {
- "selected-groups-actions": "Actions for selected users"
},
"delete-selected-button": "Delete groups",
"description": "You can manage groups in your repository.",
+ "selected-groups-actions": "Selected Groups",
"table": {
"cell": {
"public": {
@@ -109,28 +237,111 @@
"public": "Public Status",
"users-count": "Users"
},
- "search-placeholder": "Seach..."
+ "no-groupss-description": "Your repository does not have any groups. Please create a group first.",
+ "search-placeholder": "Search by group name...",
+ "title": "Groups List"
},
"title": "Groups"
},
"header": {
+ "global-search": {
+ "matching": "{category} matching \"{searchTerm}\"",
+ "no-results": "No results were found matching \"{searchTerm}\".",
+ "pallet-placeholder": "Search repositories, users, groups...",
+ "placeholder": "Global search...",
+ "search-empty": "Please enter your search word.",
+ "search-loading": "Searching..."
+ },
"logoAlt": "Header App Logo"
},
"history": {
+ "date": "Execution date and time",
"description": "You can check the history of file uploads and downloads.",
- "title": "History"
+ "empty-data": "No data.",
+ "expired": "Expired",
+ "failed": "failure",
+ "file_not_available": "File download failed.",
+ "filter": {
+ "title": "filter"
+ },
+ "group-count": "Number of groups",
+ "operator": "Execution user",
+ "private": "make private",
+ "progress": "Processing",
+ "public": "Make it public",
+ "re-download": "re-download",
+ "re-download-count": "Re-DL: {count} times",
+ "reset": "reset",
+ "show-detail": "Show details",
+ "status": "status",
+ "success": "success",
+ "tab": {
+ "download": "Download history",
+ "upload": "Upload history"
+ },
+ "table": {
+ "column": {
+ "download-date": "Download date and time",
+ "upload-date": "Upload date and time"
+ }
+ },
+ "table-title": "History list",
+ "target": "Download target | Upload target",
+ "title": "History",
+ "toggle_public_status_failed": "Failed to update publishing status.",
+ "user-count": "Number of users"
+ },
+ "login": {
+ "dev-account": "Account",
+ "dev-login-button": "Login",
+ "dev-login-error": "login failed.",
+ "dev-login-title": "Developer Lgin",
+ "title": "Login"
},
"menu": {
"management": "Management",
"other": "Other"
},
+ "modal": {
+ "add-users-to-group": {
+ "selection": "Please select the group to add to.",
+ "title": "Add the following users to the group."
+ },
+ "delete-group": {
+ "description": "Once a group is deleted, it cannot be restored.",
+ "title": "Are you sure to delete this group?"
+ },
+ "delete-groups": {
+ "description": "Once groups are deleted, they cannot be restored.",
+ "title": "Are you sure to delete these groups?"
+ },
+ "delete-repository": {
+ "confirmation": "To confirm, type \"{name}\" in the box below.",
+ "description": "Once the SP connector is deleted, it cannot be restored.",
+ "title": "Are you sure to delete the SP connector for this repository?\n",
+ "warning": "This action also deletes any groups created in the repository."
+ },
+ "remove-users-from-group": {
+ "selection": "Please select the group to remove.",
+ "title": "Remove the following users from the group."
+ },
+ "update-all-repositories-cache": {
+ "alert": "This process will take a long time to complete. It cannot be stopped at this time.",
+ "title": "Are you sure to update the cache for all repositories?"
+ }
+ },
"repositories": {
"actions": {
- "copy-sp-connector-id": "Copy SP Connecter ID to clipboard\t",
- "copy-sp-connector-id-success": "The selected repository's URL has been copied to the clipboard."
+ "copy-sp-connector-id": "Copy SP Connecter ID to clipboard\t"
},
+ "all-repositories-actions": "All Repositories",
"description": "You can check information about the repositories you manage.",
"entity-id-label": "Entity ID: ",
+ "list": {
+ "no-repositories-description": "Please change your search criteria and try again.",
+ "no-repositories-title": "Repository not found"
+ },
+ "selected-repositories-actions": "Selected Repositories",
"table": {
"column": {
"entity-ids": "Entity ID",
@@ -140,6 +351,8 @@
},
"no-repositories-description": "you have no repositories to manage",
"no-repositories-title": "No repositories found",
+ "search-placeholder": "Search by repository name, URL, EntityID...",
+ "search-placeholder-service-name-only": "Search by repository name...",
"title": "Repositories List"
},
"title": "Repositories",
@@ -147,8 +360,7 @@
},
"repository": {
"actions": {
- "copy-url": "Copy URL to clipboard",
- "copy-url-success": "The selected repository's URL has been copied to the clipboard."
+ "copy-url": "Copy URL to clipboard"
},
"created": "Created at",
"details-basic-section": "Basic Information",
@@ -156,12 +368,6 @@
"details-title": "Repository Details",
"entity-ids": "EntityID",
"entity-ids-description": "EntityID of the SP linked to the repository",
- "error": {
- "conflict": {
- },
- "forbidden": "You do not have permission to create a repository.",
- "not-found": "Repository not found."
- },
"new-description": "You can create an SP connector for your repository.",
"new-title": "Create new repository",
"number-of-groups": "Groups",
@@ -179,7 +385,7 @@
"sp-connector-description": "Identifier of the SP connector associated with the repository",
"suspended": "Operating condition",
"suspended-active": "Active",
- "suspended-description": "Grant the system administrator role to the user. This requires that the user does not belong to any repository.",
+ "suspended-description": "SP connector operating status.",
"suspended-inactive": "Suspended",
"validation": {
"entityIds": {
@@ -194,28 +400,26 @@
},
"serviceUrl": {
"invalid": "URL is invalid.",
- "max-length": "The URL must contain {max} characters.",
+ "max-length": "The URL must be less than or equal to {max} characters.",
"required": "URL is a required field."
}
}
},
+ "submenu": {
+ "logout": "Logout",
+ "manual": "User Manual",
+ "profile": "Profile"
+ },
"success": {
"creation": {
- "title": "Create successful"
},
"group": {
- "created-description": "Successfully created group.",
- "updated-description": "Successfully updated group information."
},
"repository": {
- "created-description": "Successfully created SP connector for repository.",
- "updated-description": "Successfully updated repository information."
},
"updated": {
- "title": "Update successful"
},
"user": {
- "created-description": "Successfully created user."
}
},
"table": {
@@ -225,6 +429,9 @@
},
"actions-label": "Action",
"display-columns-label": "Columns",
+ "display-count-label": "Number of items displayed:",
+ "display-info-text": "Displaying {start}~{end} items (all {total} items)",
+ "display-info-text-empty": "Displaying 0 items (all 0 items)",
"filter-button-label": "Filter",
"page-size-label": "Page size:",
"selected": "selected",
@@ -232,19 +439,134 @@
"switch-to-table-view": "Switch to table view"
},
"toast": {
- "success-title": "Success"
+ "error": {
+ "bad-gateway": {
+ "description": "Communication with the server failed.",
+ "title": "Bad Gateway"
+ },
+ "bad-request": {
+ "description": "The server marked the request as invalid.",
+ "title": "Bad Request"
+ },
+ "cache-update-in-progress": {
+ "description": "The group cache update operation is already in progress."
+ },
+ "conflict": {
+ "description": "There was a conflict in the input content.",
+ "title": "Conflict Error"
+ },
+ "failed-search": {
+ "title": "Search Error"
+ },
+ "forbidden": {
+ "description": "No access rights.",
+ "title": "Forbidden"
+ },
+ "invalid-search-query": {
+ "description": "Contains invalid search criteria."
+ },
+ "no-cache-update-task": {
+ "description": "The cache update process is not currently running."
+ },
+ "not-found": {
+ "description": "Request destination not found.",
+ "title": "Not Found"
+ },
+ "server": {
+ "description": "An unexpected error occurred on the server.",
+ "title": "Internal Server Error"
+ },
+ "service-unavailable": {
+ "description": "Service is temporarily unavailable.",
+ "title": "Service Unavailable"
+ },
+ "unauthorized": {
+ "description": "Certified session has expired. Please login again.",
+ "title": "Unauthorized Error"
+ },
+ "unexpected": {
+ "description": "An unexpected error has occurred.",
+ "title": "Error"
+ },
+ "validation": {
+ "description": "The input content is invalid. Please check the message in the input field.",
+ "title": "Validation Error"
+ }
+ },
+ "success": {
+ "copy-entity-id": {
+ "description": "EntityID has been copied to the clipboard."
+ },
+ "copy-field": {
+ "description": "{field} has been copied to the clipboard."
+ },
+ "copy-group-id": {
+ "description": "The group ID has been copied to the clipboard."
+ },
+ "copy-service-url": {
+ "description": "The repository URL has been copied to the clipboard."
+ },
+ "copy-sp-connector-id": {
+ "description": "The selected repository's URL has been copied to the clipboard."
+ },
+ "copy-url": {
+ "description": "The selected repository's URL has been copied to the clipboard."
+ },
+ "copy-user-eppn": {
+ "description": "The selected user's ePPN has been copied to the clipboard."
+ },
+ "copy-user-id": {
+ "description": "The user ID has been copied to the clipboard."
+ },
+ "created": {
+ "title": "Create successful"
+ },
+ "deleted": {
+ "title": "Delete successful"
+ },
+ "group-cache-update-started": {
+ "description": "The group cache update operation has started."
+ },
+ "group-created": {
+ "description": "Successfully created group."
+ },
+ "group-deleted": {
+ "description": "Successfully deleted group."
+ },
+ "group-updated": {
+ "description": "Successfully updated group information."
+ },
+ "repository-created": {
+ "description": "Successfully created SP connector for repository."
+ },
+ "repository-deleted": {
+ "description": "Successfully deleted SP connector for repository."
+ },
+ "repository-updated": {
+ "description": "Successfully updated repository information."
+ },
+ "title": "Success",
+ "updated": {
+ "title": "Update successful"
+ },
+ "user-created": {
+ "description": "Successfully created user."
+ },
+ "user-updated": {
+ "description": "Successfully updated user information.\t"
+ }
+ }
},
"user": {
"actions": {
"copy-eppn": "Copy ePPN to clipboard",
- "copy-eppn-success": "The selected user's ePPN has been copied to the clipboard.",
- "copy-id": "Copy ID to clipboard",
- "copy-id-success": "The user ID has been copied to the clipboard."
+ "copy-id": "Copy ID to clipboard"
},
"affiliated-repositories": "Affiliated Repositories",
"affiliated-repositories-description": "Specify the repository and role to assign to the user.",
"created": "Created",
"details-affiliation-authority-section": "Affiliation / Authority",
+ "details-affiliation-section": "Affiliation",
"details-basic-section": "Basic Information",
"details-title": "User Details",
"emails": "Email",
@@ -252,9 +574,6 @@
"eppns": "ePPN",
"eppns-description": "A unique, persistent identifier assigned to a user by an IdP.",
"error": {
- "conflict-description": "There was a conflict in the input content.",
- "conflict-title": "Conflict error",
- "not-found": "User not found."
},
"groups": "Affiliated Groups",
"groups-description": "Select the group to which the user belongs.",
@@ -263,19 +582,20 @@
"new-description": "You can create new users in your repository.",
"new-title": "Create new user",
"placeholder": {
- "emails": "information.taro{'@'}university.ac.jp",
- "eppns": "information.taro{'@'}idp.university.ac.jp",
+ "emails": "joho.taro{'@'}university.ac.jp",
+ "eppns": "joho.taro{'@'}idp.university.ac.jp",
"group-name": "Select a group.",
"preferred-language": "Select a language.",
"repository-name": "Select a repository.",
"role": "Select a user role.",
- "userName": "Information Taro"
+ "userName": "Joho Taro"
},
"preferred-language": "Preferred Language",
"preferred-language-en": "English",
"preferred-language-ja": "Japanese",
"privileged": "Privileged",
"roles-title": "Roles",
+ "self-editing-warning": "If you change your affiliation or role, you will need to login again.",
"title": "User Details",
"userName-description": "Display name for this user. It is not linked to the actual user's account name.",
"username": "Username",
@@ -289,6 +609,9 @@
"at-least-one": "At least one ePPN is required.",
"required": "ePPN is a required field"
},
+ "groups": {
+ "must-be-empty-for-system-admin": "System administrators must not belong to any groups."
+ },
"preferredLanguage": {
"invalid": "Select the preferred language from the dropdown list."
},
@@ -308,10 +631,15 @@
}
},
"users": {
+ "all-users-actions": "All Users",
+ "alert": {
+ "filter-by-both-role-group-disabled": "Currently, due to limited functionality, it is not possible to select role and group filters at the same time.",
+ "filter-by-last-modified-disabled": "Due to limited functionality, filtering by last updated time is currently not available."
+ },
"button": {
- "selected-users-actions": "Actions for selected users",
+ "all-users-download": "Download all users",
"selected-users-add-to-group": "Add to group",
- "selected-users-export": "Export users",
+ "selected-users-download": "Download users",
"selected-users-remove-from-group": "Remove from group"
},
"description": "You can manage users for your repositories.",
@@ -324,6 +652,7 @@
"repository-admin": "Repository Administrator",
"system-admin": "System Administrator"
},
+ "selected-users-actions": "Selected Users",
"table": {
"column": {
"emails": "Email",
@@ -334,7 +663,8 @@
},
"no-users-description": "Your repository does not have any users. Please create a user or upload a file first.",
"no-users-title": "No users found",
- "search-placeholder": "Search...",
+ "search-placeholder": "Search by username, email, ePPN...",
+ "search-placeholder-username-only": "Search by username...",
"title": "Users List"
},
"title": "Users"
diff --git a/src/app/i18n/locales/ja.json b/src/app/i18n/locales/ja.json
index fc3ef54c..1a7eb5fc 100644
--- a/src/app/i18n/locales/ja.json
+++ b/src/app/i18n/locales/ja.json
@@ -1,34 +1,134 @@
{
+ "bulk": {
+ "about": "一括操作について",
+ "about-description": "ファイルに含まれるユーザーは新規登録または更新されます。",
+ "about-description2": "既存ユーザーはidで照合し、一致する場合は更新されます。",
+ "about-description3": "ファイルに含まれていないユーザーの削除を選択できます。",
+ "about-description4": "対応形式: TSV, CSV, Excel",
+ "column": {
+ "eppn": "ePPN",
+ "groups": "グループ ID",
+ "row": "行",
+ "status": "ステータス",
+ "user-name": "名前"
+ },
+ "completed-at": "終了日時",
+ "description": "ファイルのアップロードによりリポジトリに所属するユーザーを一括操作することができます。",
+ "deselect_all": "すべて解除",
+ "empty": "空",
+ "excute": {
+ },
+ "execute": {
+ "failed": "ユーザーの更新に失敗しました。",
+ "timeout": "一括更新処理がタイムアウトしました。"
+ },
+ "file-format-error": "対応していないファイル形式です。TSV、CSV、またはExcelファイルを選択してください。",
+ "file-required": "ファイルを選択してください。",
+ "import": {
+ },
+ "import-results": "一括操作結果",
+ "missing-user": {
+ "confirm": "削除の確認",
+ "confirm_desc": "選択した${count}件のユーザーは削除されます。この操作は元に戻せません。",
+ "select": "削除するユーザーを選択してください。"
+ },
+ "missing_user": "ファイルに含まれていないユーザー",
+ "no-results": "データが見つかりません。",
+ "operator": "実行ユーザー",
+ "repository-required": "リポジトリを選択してください。",
+ "select-repository": "リポジトリを選択してください。",
+ "select_all": "すべて選択",
+ "start-at": "開始日時",
+ "status": {
+ "create": "作成",
+ "delete": "削除",
+ "error": "エラー",
+ "skip": "更新なし",
+ "update": "更新"
+ },
+ "step": {
+ "complete": "完了",
+ "complete_description": "アップロード結果",
+ "select_file": "ファイル選択",
+ "select_file_description": "CSV,TSVまたはExcelファイル",
+ "validate": "データ検証",
+ "validate_description": "変更内容の確認"
+ },
+ "title": "ユーザー一括操作",
+ "upload": {
+ "execute": "アップロード実行"
+ },
+ "upload-field": "ファイルを選択またはドラッグ&ドロップ",
+ "upload-file": "アップロードファイル",
+ "upload-file-info": "一括操作結果",
+ "validation": {
+ "error": "不正なデータが検出されました。",
+ "error-detail": "ファイルを修正して再度アップロードしてください。",
+ "failed": "ファイルの検証に失敗しました。",
+ "fetch_failed": "検証結果の取得に失敗しました。",
+ "fix_error": "エラーを修正してください。",
+ "results": "データプレビュー",
+ "timeout": "ファイルの検証がタイムアウトしました。"
+ }
+ },
"button": {
"add": "追加",
+ "back": "戻る",
"cancel": "取り消し",
"create-new": "新規作成",
"delete": "削除",
+ "next": "次へ",
"reload": "再読み込み",
+ "remove": "除外",
"save": "保存",
"update": "更新",
- "upload-users": "アップロード"
+ "upload": "アップロード"
},
"cache-groups": {
- "description": "WEKO3が利用するグループ情報のキャッシュ状況を管理できます。",
- "title": "グループキャッシュ"
- },
- "error": {
- "conflict": {
- "description": "入力内容に競合がありました。",
- "title": "競合エラー"
+ "button": {
},
- "server": {
- "description": "サーバーで予期せぬエラーが発生しました。",
- "title": "サーバーエラー"
+ "confirm-update-selected-repositories": "以下の{count}リポジトリを更新しますか?",
+ "count": "{current} / {total} 件",
+ "filter-placeholder": "キャッシュ状態",
+ "select": {
},
- "unexpected": {
- "description": "予期しないエラーが発生しました。",
- "title": "エラー"
+ "table": {
+ "column": {
+ "repository-status": "更新状況"
+ }
},
- "validation": {
- "description": "入力内容が不正です。入力欄のメッセージを確認してください。",
- "title": "バリデーションエラー"
+ "update-completed": "更新完了({count}件)",
+ "update-error": "キャッシュ更新処理が実行中です。"
+ },
+ "common": {
+ "loading": "読み込み中..."
+ },
+ "error-page": {
+ "failed": {
+ "load-more": "再ダウンロード履歴の取得に失敗しました"
+ },
+ "forbidden": {
+ "bulk-edit": "このリポジトリのユーザーを操作する権限がありません。",
+ "bulk-result": "アップロード履歴を閲覧する権限がありません。",
+ "group-access": "このグループにアクセスする権限がありません。",
+ "group-caches": "グループキャッシュを管理する権限がありません。",
+ "group-create": "選択したリポジトリにグループを作成する権限がありません。",
+ "group-delete": "このグループを削除する権限がありません。",
+ "group-edit": "このグループの情報を変更する権限がありません。",
+ "group-member-edit": "このグループのメンバーを変更する権限がありません。",
+ "repository-access": "このリポジトリにアクセスする権限がありません。",
+ "repository-create": "リポジトリを作成する権限がありません。",
+ "repository-edit": "このリポジトリの情報を変更する権限がありません。",
+ "user-access": "このユーザーにアクセスする権限がありません。",
+ "user-create": "選択したリポジトリやグループにユーザーを所属させる権限がありません。",
+ "user-edit": "このユーザーの情報を変更する権限がありません。"
+ },
+ "not-found": {
+ "bulk-result": "該当するアップロード履歴が見つかりません。",
+ "bulk-validation": "ファイルの検証結果が見つかりません",
+ "group": "該当するグループが見つかりません。",
+ "repository": "該当するリポジトリが見つかりません。",
+ "user": "該当するユーザーが見つかりません。"
}
},
"footer": {
@@ -42,10 +142,8 @@
"details-title": "グループ詳細",
"display-name": "表示名",
"display-name-description": "グループの表示名です。実際のリポジトリ内でのグループ名とはリンクしません。",
- "error": {
- "not-found": "グループが見つかりません。"
- },
"id": "グループ ID",
+ "id-description": "グループの識別子です。文字列の上限は選択したリポジトリによって変わります。",
"member-list-visibility": {
"hidden": "非公開",
"private": "メンバーにのみ公開",
@@ -53,6 +151,7 @@
},
"new-description": "ユーザーをまとめて管理するグループを作成できます。",
"new-title": "グループの作成",
+ "number-of-users": "ユーザー数",
"placeholder": {
"display-name": "ジャイロ研究科",
"id": "グループの ID です。実際のリポジトリで使用されます。",
@@ -64,10 +163,16 @@
},
"repository": "@:repositories.title",
"repository-description": "グループを作成するリポジトリを選択します。",
+ "type-role": "ロールグループ",
"validation": {
"displayName": {
"required": "表示名は必須項目です。"
},
+ "groupId": {
+ "invalid-format": "グループ ID には半角英数字と記号(.-_)が使用可能です。",
+ "max-length": "グループ ID は {max} 文字以下で入力する必要があります。",
+ "required": "グループ ID は必須項目です。"
+ },
"memberListVisibility": {
"invalid": "メンバーの公開状態はドロップダウンリストから選択してください。"
},
@@ -78,16 +183,37 @@
}
}
},
+ "group-caches": {
+ "button": {
+ "update-all": "全リポジトリを更新",
+ "update-all-repositories": "キャッシュを全更新",
+ "update-selected-repositories": "キャッシュを更新"
+ },
+ "description": "WEKO3 が利用するグループ情報のキャッシュ状況を管理できます。",
+ "search-placeholder": "検索...",
+ "status": {
+ "cached": "キャッシュあり",
+ "no-cached": "キャッシュなし"
+ },
+ "table": {
+ "column": {
+ "repository-name": "リポジトリ名",
+ "repository-updated-at": "キャッシュ更新日時",
+ "repository-url": "リポジトリURL"
+ }
+ },
+ "title": "グループキャッシュ",
+ "updating": "更新中..."
+ },
"groups": {
"actions": {
- "copy-id": "グループ ID をコピー",
- "copy-id-success": "クリップボードにグループ ID がコピーされました。"
+ "copy-id": "グループ ID をコピー"
},
"button": {
- "selected-groups-actions": "選択したグループへのアクション"
},
"delete-selected-button": "グループを削除",
"description": "あなたのリポジトリにあるグループを管理できます。",
+ "selected-groups-actions": "選択したグループ",
"table": {
"cell": {
"public": {
@@ -106,28 +232,111 @@
"public": "グループの公開状態",
"users-count": "ユーザー数"
},
- "search-placeholder": "検索..."
+ "search-placeholder": "グループ名で検索...",
+ "no-groupss-description": "あなたのリポジトリにはグループがありません。まずはグループを作成してください。",
+ "title": "グループ一覧"
},
"title": "グループ"
},
"header": {
+ "global-search": {
+ "matching": "「{searchTerm}」に一致する{category}",
+ "no-results": "「{searchTerm}」に一致する結果は見つかりませんでした。",
+ "pallet-placeholder": "リポジトリ、グループ、ユーザーを検索...",
+ "placeholder": "横断検索...",
+ "search-empty": "検索ワードを入力してください。",
+ "search-loading": "検索中..."
+ },
"logoAlt": "ヘッダーロゴ"
},
"history": {
- "description": "ファイルのアップロード・ダウウンロードに履歴を確認できます。",
- "title": "履歴"
+ "date": "実行日時",
+ "description": "ファイルのアップロード・ダウウンロードの履歴を確認できます。",
+ "empty-data": "データがありません。",
+ "expired": "期限切れ",
+ "failed": "失敗",
+ "file_not_available": "ファイルのダウンロードに失敗しました。",
+ "filter": {
+ "title": "フィルター"
+ },
+ "group-count": "グループ数",
+ "operator": "実行ユーザー",
+ "private": "非公開にする",
+ "progress": "処理中",
+ "public": "公開にする",
+ "re-download": "再ダウンロード",
+ "re-download-count": "再DL: {count}回",
+ "reset": "リセット",
+ "show-detail": "詳細を表示",
+ "status": "ステータス",
+ "success": "成功",
+ "tab": {
+ "download": "ダウンロード履歴",
+ "upload": "アップロード履歴"
+ },
+ "table": {
+ "column": {
+ "download-date": "ダウンロード日時",
+ "upload-date": "アップロード日時"
+ }
+ },
+ "table-title": "履歴一覧",
+ "target": "ダウンロード対象 | アップロード対象",
+ "title": "履歴",
+ "toggle_public_status_failed": "公開状態の更新に失敗しました。",
+ "user-count": "ユーザー数"
+ },
+ "login": {
+ "dev-account": "アカウント",
+ "dev-login-button": "ログイン",
+ "dev-login-error": "ログインに失敗しました。",
+ "dev-login-title": "開発者ログイン",
+ "title": "ログイン"
},
"menu": {
"management": "管理",
"other": "その他"
},
+ "modal": {
+ "add-users-to-group": {
+ "selection": "追加先のグループを選択してください。",
+ "title": "以下のユーザーをグループに追加します。"
+ },
+ "delete-group": {
+ "description": "一度削除したグループは元に戻すことができません。",
+ "title": "このグループを削除しますか?"
+ },
+ "delete-groups": {
+ "description": "一度削除したグループは元に戻すことができません。",
+ "title": "これらグループを削除しますか?"
+ },
+ "delete-repository": {
+ "confirmation": "確認のため、以下に「{name}」と入力してください。",
+ "description": "一度削除した SP コネクタは元に戻すことができません。",
+ "title": "このリポジトリに対応する SP コネクタを削除しますか?",
+ "warning": "リポジトリに作成されたグループも併せて削除されます。"
+ },
+ "remove-users-from-group": {
+ "selection": "除外元のグループを選択してください。",
+ "title": "以下のユーザーをグループから除外します。"
+ },
+ "update-all-repositories-cache": {
+ "alert": "すべての処理は完了までに長い時間がかかります。現時点ではこの処理を途中で停止できません。",
+ "title": "全リポジトリのキャッシュの更新を実行しますか。"
+ }
+ },
"repositories": {
"actions": {
- "copy-sp-connector-id": "SP コネクタ ID をコピー",
- "copy-sp-connector-id-success": "SP コネクタ ID がクリップボードにコピーされました。"
+ "copy-sp-connector-id": "SP コネクタ ID をコピー"
},
+ "all-repositories-actions": "すべてのリポジトリ",
"description": "あなたが管理しているリポジトリの情報を確認できます。",
"entity-id-label": "Entity ID:",
+ "list": {
+ "no-repositories-description": "検索条件を変更して、再度お試しください。",
+ "no-repositories-title": "リポジトリが見つかりません"
+ },
+ "selected-repositories-actions": "選択したリポジトリ",
"table": {
"column": {
"entity-ids": "Entity ID",
@@ -137,6 +346,8 @@
},
"no-repositories-description": "あなたには管理できるリポジトリがありません",
"no-repositories-title": "リポジトリが見つかりません",
+ "search-placeholder": "リポジトリ名、URL、EntityIDで検索...",
+ "search-placeholder-service-name-only": "リポジトリ名で検索...",
"title": "リポジトリ一覧"
},
"title": "リポジトリ",
@@ -144,8 +355,7 @@
},
"repository": {
"actions": {
- "copy-url": "URL をコピー",
- "copy-url-success": "クリップボードにリポジトリの URL がコピーされました。"
+ "copy-url": "URL をコピー"
},
"created": "作成日時",
"details-basic-section": "基本情報",
@@ -153,12 +363,6 @@
"details-title": "リポジトリ詳細",
"entity-ids": "EntityID",
"entity-ids-description": "リポジトリに紐づけられている SP の EntityID です。",
- "error": {
- "conflict": {
- },
- "forbidden": "リポジトリを作成する権限がありません。",
- "not-found": "リポジトリが見つかりません。"
- },
"new-description": "リポジトリの SP コネクタを作成できます。",
"new-title": "リポジトリの作成",
"number-of-groups": "グループ数",
@@ -176,7 +380,7 @@
"sp-connector-description": "リポジトリに紐づく SP コネクタの識別子です。",
"suspended": "稼働状態",
"suspended-active": "稼働",
- "suspended-description": "ユーザーにシステム管理者のロールを付与します。ユーザーがどのリポジトリにも所属していない必要があります。",
+ "suspended-description": "SP コネクタの稼働状態です。",
"suspended-inactive": "休止",
"validation": {
"entityIds": {
@@ -191,29 +395,15 @@
},
"serviceUrl": {
"invalid": "URL が不正です。",
- "max-length": "URLは {max} 文字で入寮する必要があります。",
+ "max-length": "URLは {max} 文字以下で入力する必要があります。",
"required": "URL は必須項目です。"
}
}
},
- "success": {
- "creation": {
- "title": "作成成功"
- },
- "group": {
- "created-description": "グループの作成に成功しました。",
- "updated-description": "グループ情報の更新に成功しました。"
- },
- "repository": {
- "created-description": "リポジトリの SP コネクタの作成に成功しました。",
- "updated-description": "リポジトリ情報の更新に成功しました。"
- },
- "updated": {
- "title": "更新成功"
- },
- "user": {
- "created-description": "ユーザーの作成に成功しました。"
- }
+ "submenu": {
+ "logout": "ログアウト",
+ "manual": "利用者マニュアル",
+ "profile": "プロフィール"
},
"table": {
"actions": {
@@ -222,6 +412,9 @@
},
"actions-label": "アクション",
"display-columns-label": "表示項目",
+ "display-count-label": "表示件数:",
+ "display-info-text": "{start}~{end}件を表示(全{total}件)",
+ "display-info-text-empty": "0件を表示(全0件)",
"filter-button-label": "フィルター",
"page-size-label": "表示件数:",
"selected": "選択",
@@ -229,33 +422,143 @@
"switch-to-table-view": "テーブル表示に切り替え"
},
"toast": {
- "success-title": "成功"
+ "error": {
+ "bad-gateway": {
+ "description": "サーバーとの通信に失敗しました。",
+ "title": "通信エラー"
+ },
+ "bad-request": {
+ "description": "サーバーがリクエストを不正とみなしました。",
+ "title": "不正なリクエスト"
+ },
+ "cache-update-in-progress": {
+ "description": "すでにグループキャッシュの更新処理が進行中です。"
+ },
+ "conflict": {
+ "description": "入力内容に競合がありました。",
+ "title": "競合エラー"
+ },
+ "failed-search": {
+ "title": "検索エラー"
+ },
+ "forbidden": {
+ "description": "アクセス権がありません。",
+ "title": "認可エラー"
+ },
+ "invalid-search-query": {
+ "description": "不正な検索条件が含まれます。"
+ },
+ "no-cache-update-task": {
+ "description": "キャッシュの更新処理は実行中ではありません。"
+ },
+ "not-found": {
+ "description": "リクエスト先が見つかりません。",
+ "title": "未検出"
+ },
+ "server": {
+ "description": "サーバーで予期せぬエラーが発生しました。",
+ "title": "サーバーエラー"
+ },
+ "service-unavailable": {
+ "description": "サービスが一時的に利用できません。",
+ "title": "サービス利用不可"
+ },
+ "unauthorized": {
+ "description": "認証済みセッションの期限が切れました。再ログインしてください。",
+ "title": "認証エラー"
+ },
+ "unexpected": {
+ "description": "予期しないエラーが発生しました。",
+ "title": "エラー"
+ },
+ "validation": {
+ "description": "入力内容が不正です。入力欄のメッセージを確認してください。",
+ "title": "バリデーションエラー"
+ }
+ },
+ "success": {
+ "copy-entity-id": {
+ "description": "クリップボードに EntityID がコピーされました。"
+ },
+ "copy-field": {
+ "description": "クリップボードに{field}がコピーされました。\t"
+ },
+ "copy-group-id": {
+ "description": "クリップボードにグループ ID がコピーされました。"
+ },
+ "copy-service-url": {
+ "description": "クリップボードにリポジトリ URL がコピーされました。"
+ },
+ "copy-sp-connector-id": {
+ "description": "SP コネクタ ID がクリップボードにコピーされました。"
+ },
+ "copy-url": {
+ "description": "クリップボードにリポジトリの URL がコピーされました。"
+ },
+ "copy-user-eppn": {
+ "description": "クリップボードに ePPN がコピーされました。"
+ },
+ "copy-user-id": {
+ "description": "クリップボードにユーザー ID がコピーされました。"
+ },
+ "created": {
+ "title": "作成成功"
+ },
+ "deleted": {
+ "title": "削除成功"
+ },
+ "group-cache-update-started": {
+ "description": "グループキャッシュの更新処理が開始しました。"
+ },
+ "group-created": {
+ "description": "グループの作成に成功しました。"
+ },
+ "group-deleted": {
+ "description": "グループの削除に成功しました。"
+ },
+ "group-updated": {
+ "description": "グループ情報の更新に成功しました。"
+ },
+ "repository-created": {
+ "description": "リポジトリの SP コネクタの作成に成功しました。"
+ },
+ "repository-deleted": {
+ "description": "リポジトリの SP コネクタの削除に成功しました。"
+ },
+ "repository-updated": {
+ "description": "リポジトリ情報の更新に成功しました。"
+ },
+ "title": "成功",
+ "updated": {
+ "title": "更新成功"
+ },
+ "user-created": {
+ "description": "ユーザーの作成に成功しました。"
+ },
+ "user-updated": {
+ "description": "ユーザー情報の更新に成功しました。"
+ }
+ }
},
"user": {
"actions": {
"copy-eppn": "ePPN をコピー",
- "copy-eppn-success": "クリップボードに ePPN がコピーされました。",
- "copy-id": "ユーザー ID をコピー",
- "copy-id-success": "クリップボードにユーザー ID がコピーされました。"
+ "copy-id": "ユーザー ID をコピー"
},
"affiliated-repositories": "所属リポジトリ",
"affiliated-repositories-description": "ユーザーが所属するリポジトリとロールを指定します。",
"created": "作成日時",
"details-affiliation-authority-section": "所属・権限",
+ "details-affiliation-section": "所属",
"details-basic-section": "基本情報",
"details-title": "ユーザー詳細",
"emails": "メールアドレス",
"emails-description": "ユーザーのメールアドレスです。",
- "eppns": "ePPN",
+ "eppns": " ePPN ",
"eppns-description": "IdP によりユーザーに割り当てられた一意で永続的な識別子です。",
- "error": {
- "conflict-description": "入力内容に競合がありました。",
- "conflict-title": "競合エラー",
- "not-found": "ユーザーが見つかりません。"
- },
"groups": "所属グループ",
"groups-description": "ユーザーを所属させるグループを選択します。",
- "id": "ユーザー ID",
+ "id": "ユーザー ID ",
"last-modified": "最終更新日時",
"new-description": "あなたのリポジトリに新しいユーザーを作成できます。",
"new-title": "ユーザーの作成",
@@ -273,6 +576,7 @@
"preferred-language-ja": "日本語",
"privileged": "特権",
"roles-title": "ロール",
+ "self-editing-warning": "自身の所属やロールを変更した場合、再ログインが必要です。",
"title": "ユーザー詳細",
"userName-description": "ユーザーの表示名です。実際のユーザーのアカウント名とは連動しません。",
"username": "ユーザー名",
@@ -286,6 +590,9 @@
"at-least-one": "ePPN は 1 つ以上必須な項目です。",
"required": "ePPN は必須項目です。"
},
+ "groups": {
+ "must-be-empty-for-system-admin": "システム管理者はどのグループにも所属していない必要があります。"
+ },
"preferredLanguage": {
"invalid": "優先言語はドロップダウンリストから選択してください。"
},
@@ -296,7 +603,7 @@
},
"must-be-empty-for-system-admin": "システム管理者はどのリポジトリにも所属していない必要があります。",
"userRole": {
- "required": "ユーザーのロールはドロップダウンリストから選択してください。"
+ "required": "ユーザーのロールをドロップダウンリストから選択してください。"
}
},
"userName": {
@@ -305,10 +612,15 @@
}
},
"users": {
+ "alert": {
+ "filter-by-both-role-group-disabled": "現在、機能が制限されているため、ロールとグループのフィルターを同時に選択することができません。",
+ "filter-by-last-modified-disabled": "現在、機能が制限されているため、最終更新日時によるフィルターはご利用いただけません。"
+ },
+ "all-users-actions": "すべてのユーザー",
"button": {
- "selected-users-actions": "選択ユーザーへのアクション",
+ "all-users-download": "全件ダウンロード",
"selected-users-add-to-group": "グループに追加",
- "selected-users-export": "エクスポート",
+ "selected-users-download": "ダウンロード",
"selected-users-remove-from-group": "グループから除外"
},
"description": "あなたのリポジトリのユーザーを管理できます。",
@@ -319,6 +631,7 @@
"repository-admin": "リポジトリ管理者",
"system-admin": "システム管理者"
},
+ "selected-users-actions": "選択したユーザー",
"table": {
"column": {
"emails": "Email",
@@ -329,7 +642,8 @@
},
"no-users-description": "あなたのリポジトリにはユーザーがいません。まずはユーザーを作成するか、ファイルをアップロードしてください。",
"no-users-title": "ユーザーが見つかりません",
- "search-placeholder": "検索...",
+ "search-placeholder": "ユーザー名、Email、ePPN で検索...",
+ "search-placeholder-username-only": "ユーザー名で検索...",
"title": "ユーザー一覧"
},
"title": "ユーザー"
diff --git a/src/app/layouts/default.vue b/src/app/layouts/default.vue
index 0f917118..22ad9a61 100644
--- a/src/app/layouts/default.vue
+++ b/src/app/layouts/default.vue
@@ -1,21 +1,14 @@
-
-
-
-
+
+
diff --git a/src/app/layouts/unauth.vue b/src/app/layouts/unauth.vue
new file mode 100644
index 00000000..ef21006e
--- /dev/null
+++ b/src/app/layouts/unauth.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pages/bulk/[id].vue b/src/app/pages/bulk/[id].vue
new file mode 100644
index 00000000..0817fe65
--- /dev/null
+++ b/src/app/pages/bulk/[id].vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pages/bulk/index.vue b/src/app/pages/bulk/index.vue
new file mode 100644
index 00000000..f0de4475
--- /dev/null
+++ b/src/app/pages/bulk/index.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pages/cache-groups/index.vue b/src/app/pages/cache-groups/index.vue
deleted file mode 100644
index f57787e7..00000000
--- a/src/app/pages/cache-groups/index.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/app/pages/group-caches/index.vue b/src/app/pages/group-caches/index.vue
new file mode 100644
index 00000000..559bbc02
--- /dev/null
+++ b/src/app/pages/group-caches/index.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+ {{ $t('group-caches.updating') }}
+
+ {{ progressCount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ updateQuery({ q: searchTerm, p: 1 })"
+ >
+
+
+
+
+
+
+
+
+
+ {{ $t('table.page-size-label') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ pageInfo }}
+
+
+ updateQuery({ p: value })"
+ />
+
+
+
+
+
+
+
+
+ {{ repo.serviceName }}
+
+
+ {{ repo.serviceUrl }}
+
+
+
+
+
+
+
+
+ { close(); await onExecute('id-specified'); }"
+ />
+
+
+
+
+
+
+
+
+
+ { close(); await onExecute('all'); }"
+ />
+
+
+
diff --git a/src/app/pages/groups/[id].vue b/src/app/pages/groups/[id].vue
index f69fda0f..39ead200 100644
--- a/src/app/pages/groups/[id].vue
+++ b/src/app/pages/groups/[id].vue
@@ -1,32 +1,40 @@
@@ -124,12 +176,13 @@ const onCancel = () => {
:ui="{ root: 'py-2 mb-6', description: 'mt-4' }"
/>
-
+
@@ -140,19 +193,46 @@ const onCancel = () => {
{{ $t('group.details-title') }}
-
+
+
+
+
+
+ {{ group.displayName }}
+
+
+ {{ group.id }}
+
+
+
+
+
+ { await onDelete(); close(); }"
+ />
+
+
onSubmit(event.data as GroupUpdateForm)" @cancel="onCancel"
/>
diff --git a/src/app/pages/groups/index.vue b/src/app/pages/groups/index.vue
index 847bf054..ee731942 100644
--- a/src/app/pages/groups/index.vue
+++ b/src/app/pages/groups/index.vue
@@ -1,36 +1,102 @@
@@ -38,22 +104,25 @@ const pageInfo = makePageInfo(searchResult)
-
-
-
-
+
+
+
+
+
@@ -78,13 +147,12 @@ const pageInfo = makePageInfo(searchResult)
:label="$t('table.filter-button-label')"
color="neutral" variant="outline" icon="i-lucide-filter"
:trailing-icon="isFilterOpen ? 'i-lucide-chevron-up' : 'i-lucide-chevron-down'"
- :loading="filterOptionsStatus === 'pending'"
@click="isFilterOpen = !isFilterOpen"
/>
-
+
+
+
@@ -166,4 +244,38 @@ const pageInfo = makePageInfo(searchResult)
+
+
+
+
+
+ {{ group.displayName }}
+
+
+ {{ group.id }}
+
+
+
+
+
+
+
+
+ { await onDelete(); close(); }"
+ />
+
+
diff --git a/src/app/pages/groups/new.vue b/src/app/pages/groups/new.vue
index 7161a7f1..d4ef54f2 100644
--- a/src/app/pages/groups/new.vue
+++ b/src/app/pages/groups/new.vue
@@ -1,47 +1,66 @@
@@ -53,7 +72,7 @@ const onSubmit = async (data: GroupCreatePayload) => {
:ui="{ root: 'py-2 mb-6', description: 'mt-4' }"
/>
-
+
@@ -65,9 +84,8 @@ const onSubmit = async (data: GroupCreatePayload) => {
onSubmit(data as GroupCreatePayload)"
+ :model-value="state" mode="new"
+ @submit="(event) => onSubmit(event.data as GroupCreateForm)"
@cancel="() => navigateTo('/groups')"
/>
diff --git a/src/app/pages/history/index.vue b/src/app/pages/history/index.vue
index 465636f1..d21061dc 100644
--- a/src/app/pages/history/index.vue
+++ b/src/app/pages/history/index.vue
@@ -1,11 +1,128 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/pages/index.vue b/src/app/pages/index.vue
index ad884e1a..d2cef1c3 100644
--- a/src/app/pages/index.vue
+++ b/src/app/pages/index.vue
@@ -1,5 +1,9 @@
diff --git a/src/app/pages/login.vue b/src/app/pages/login.vue
index 0ed67b55..5b477fc0 100644
--- a/src/app/pages/login.vue
+++ b/src/app/pages/login.vue
@@ -1,6 +1,12 @@
+
@@ -132,12 +201,13 @@ const onCancel = () => {
:ui="{ root: 'py-2 mb-6', description: 'mt-4' }"
/>
-
+
@@ -148,19 +218,72 @@ const onCancel = () => {
{{ $t('repository.details-title') }}
-
+ :title="$t('modal.delete-repository.title')"
+ :description="$t('modal.delete-repository.description')"
+ :close="false" :ui="{ footer: 'justify-between', body: 'space-y-4' }"
+ >
+
+
+
+
+
+ {{ repository.serviceName }}
+
+
+ {{ repository.id }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { await deleteForm!.submit(); close(); }"
+ />
+
+
onSubmit(data as RepositoryUpdatePayload)" @cancel="onCancel"
+ @submit="(event) => onSubmit(event.data as RepositoryForm)"
+ @cancel="onCancel"
/>
diff --git a/src/app/pages/repositories/index.vue b/src/app/pages/repositories/index.vue
index 9241db68..028a44d1 100644
--- a/src/app/pages/repositories/index.vue
+++ b/src/app/pages/repositories/index.vue
@@ -1,4 +1,5 @@
@@ -50,7 +84,12 @@ const pageInfo = makePageInfo(searchResult)
updateQuery({ q: searchTerm, p: 1 })"
>
@@ -68,7 +107,7 @@ const pageInfo = makePageInfo(searchResult)
-
+
@@ -124,7 +163,13 @@ const pageInfo = makePageInfo(searchResult)
@@ -153,6 +198,13 @@ const pageInfo = makePageInfo(searchResult)
+
+
diff --git a/src/app/pages/repositories/new.vue b/src/app/pages/repositories/new.vue
index c0c449ba..c0ae9341 100644
--- a/src/app/pages/repositories/new.vue
+++ b/src/app/pages/repositories/new.vue
@@ -1,65 +1,78 @@
@@ -69,7 +82,7 @@ const onSubmit = async (data: RepositoryCreatePayload) => {
:ui="{ root: 'py-2 mb-6', description: 'mt-4' }"
/>
-
+
@@ -83,7 +96,7 @@ const onSubmit = async (data: RepositoryCreatePayload) => {
onSubmit(event.data)"
@cancel="() => navigateTo('/repositories')"
/>
diff --git a/src/app/pages/users/[id].vue b/src/app/pages/users/[id].vue
index d6dab792..98f9f9a2 100644
--- a/src/app/pages/users/[id].vue
+++ b/src/app/pages/users/[id].vue
@@ -1,29 +1,44 @@
@@ -63,7 +158,7 @@ watch(user, (newUser: UserDetail) => {
:ui="{ root: 'py-2 mb-6', description: 'mt-4' }"
/>
-
+